@techdocs/cli 1.10.7-next.1 → 1.10.7

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 (82) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/embedded-app/.config-schema.json +64 -31
  3. package/dist/embedded-app/index.html +1 -1
  4. package/dist/embedded-app/index.html.tmpl +1 -1
  5. package/dist/embedded-app/static/123.5e36a0db.chunk.js +2 -0
  6. package/dist/embedded-app/static/123.5e36a0db.chunk.js.map +1 -0
  7. package/dist/embedded-app/static/1659.76caecab.chunk.js +2 -0
  8. package/dist/embedded-app/static/1659.76caecab.chunk.js.map +1 -0
  9. package/dist/embedded-app/static/1733.d8004241.chunk.js +2 -0
  10. package/dist/embedded-app/static/1733.d8004241.chunk.js.map +1 -0
  11. package/dist/embedded-app/static/1749.3ab65683.chunk.js +2 -0
  12. package/dist/embedded-app/static/1749.3ab65683.chunk.js.map +1 -0
  13. package/dist/embedded-app/static/1994.78304f99.chunk.js +2 -0
  14. package/dist/embedded-app/static/1994.78304f99.chunk.js.map +1 -0
  15. package/dist/embedded-app/static/2295.a94805e5.chunk.js +5 -0
  16. package/dist/embedded-app/static/2295.a94805e5.chunk.js.map +1 -0
  17. package/dist/embedded-app/static/{3554.0ce35bc3.chunk.js → 3554.d745ad43.chunk.js} +2 -2
  18. package/dist/embedded-app/static/{3554.0ce35bc3.chunk.js.map → 3554.d745ad43.chunk.js.map} +1 -1
  19. package/dist/embedded-app/static/{4384.ae7b53b0.chunk.js → 4384.dc692f4f.chunk.js} +2 -2
  20. package/dist/embedded-app/static/{4384.ae7b53b0.chunk.js.map → 4384.dc692f4f.chunk.js.map} +1 -1
  21. package/dist/embedded-app/static/4587.85b7cf82.chunk.js +2 -0
  22. package/dist/embedded-app/static/4587.85b7cf82.chunk.js.map +1 -0
  23. package/dist/embedded-app/static/4648.e939339d.chunk.js +2 -0
  24. package/dist/embedded-app/static/4648.e939339d.chunk.js.map +1 -0
  25. package/dist/embedded-app/static/6138.d8ae40ee.chunk.js +2 -0
  26. package/dist/embedded-app/static/6138.d8ae40ee.chunk.js.map +1 -0
  27. package/dist/embedded-app/static/7203.1bd24814.chunk.js +2 -0
  28. package/dist/embedded-app/static/7203.1bd24814.chunk.js.map +1 -0
  29. package/dist/embedded-app/static/{7226.9f87f67d.chunk.js → 7226.bb48ee34.chunk.js} +2 -2
  30. package/dist/embedded-app/static/{7226.9f87f67d.chunk.js.map → 7226.bb48ee34.chunk.js.map} +1 -1
  31. package/dist/embedded-app/static/{8461.d5fe0648.chunk.js → 8461.0c3f2ac0.chunk.js} +3 -3
  32. package/dist/embedded-app/static/{8461.d5fe0648.chunk.js.map → 8461.0c3f2ac0.chunk.js.map} +1 -1
  33. package/dist/embedded-app/static/{8877.3f864531.chunk.js → 8877.a7ffabd9.chunk.js} +2 -2
  34. package/dist/embedded-app/static/{8877.3f864531.chunk.js.map → 8877.a7ffabd9.chunk.js.map} +1 -1
  35. package/dist/embedded-app/static/9050.69b458a6.chunk.js +2 -0
  36. package/dist/embedded-app/static/9050.69b458a6.chunk.js.map +1 -0
  37. package/dist/embedded-app/static/9230.23c1d5e0.chunk.js +2 -0
  38. package/dist/embedded-app/static/9230.23c1d5e0.chunk.js.map +1 -0
  39. package/dist/embedded-app/static/{main.161a9ecc.css → main.0657d08d.css} +2 -2
  40. package/dist/embedded-app/static/{main.161a9ecc.css.map → main.0657d08d.css.map} +1 -1
  41. package/dist/embedded-app/static/main.c9b00fd0.js +523 -0
  42. package/dist/embedded-app/static/main.c9b00fd0.js.map +1 -0
  43. package/dist/embedded-app/static/{module-react-aria-components.67232dc3.js → module-react-aria-components.c61f9ab4.js} +2 -2
  44. package/dist/embedded-app/static/{module-react-aria-components.67232dc3.js.map → module-react-aria-components.c61f9ab4.js.map} +1 -1
  45. package/dist/embedded-app/static/module-zod.b3376822.js +38 -0
  46. package/dist/embedded-app/static/module-zod.b3376822.js.map +1 -0
  47. package/dist/embedded-app/static/{runtime.c39b96cc.js → runtime.9896d1d9.js} +2 -2
  48. package/dist/embedded-app/static/{runtime.c39b96cc.js.map → runtime.9896d1d9.js.map} +1 -1
  49. package/dist/embedded-app/static/vendor.ff5541f5.js +6 -0
  50. package/dist/embedded-app/static/vendor.ff5541f5.js.map +1 -0
  51. package/dist/package.json.cjs.js +1 -1
  52. package/package.json +7 -7
  53. package/dist/embedded-app/static/123.97a62a60.chunk.js +0 -2
  54. package/dist/embedded-app/static/123.97a62a60.chunk.js.map +0 -1
  55. package/dist/embedded-app/static/1659.7dd5287b.chunk.js +0 -2
  56. package/dist/embedded-app/static/1659.7dd5287b.chunk.js.map +0 -1
  57. package/dist/embedded-app/static/1733.14c06ac4.chunk.js +0 -2
  58. package/dist/embedded-app/static/1733.14c06ac4.chunk.js.map +0 -1
  59. package/dist/embedded-app/static/1749.745aaeeb.chunk.js +0 -2
  60. package/dist/embedded-app/static/1749.745aaeeb.chunk.js.map +0 -1
  61. package/dist/embedded-app/static/1994.1f294712.chunk.js +0 -2
  62. package/dist/embedded-app/static/1994.1f294712.chunk.js.map +0 -1
  63. package/dist/embedded-app/static/2295.765b9f2e.chunk.js +0 -5
  64. package/dist/embedded-app/static/2295.765b9f2e.chunk.js.map +0 -1
  65. package/dist/embedded-app/static/4587.bf73bd77.chunk.js +0 -2
  66. package/dist/embedded-app/static/4587.bf73bd77.chunk.js.map +0 -1
  67. package/dist/embedded-app/static/4648.bd152b54.chunk.js +0 -2
  68. package/dist/embedded-app/static/4648.bd152b54.chunk.js.map +0 -1
  69. package/dist/embedded-app/static/6138.2560a5ba.chunk.js +0 -2
  70. package/dist/embedded-app/static/6138.2560a5ba.chunk.js.map +0 -1
  71. package/dist/embedded-app/static/7203.1ec93f6f.chunk.js +0 -2
  72. package/dist/embedded-app/static/7203.1ec93f6f.chunk.js.map +0 -1
  73. package/dist/embedded-app/static/9050.bab0c5db.chunk.js +0 -2
  74. package/dist/embedded-app/static/9050.bab0c5db.chunk.js.map +0 -1
  75. package/dist/embedded-app/static/9230.b3e5d612.chunk.js +0 -2
  76. package/dist/embedded-app/static/9230.b3e5d612.chunk.js.map +0 -1
  77. package/dist/embedded-app/static/main.cb460d15.js +0 -523
  78. package/dist/embedded-app/static/main.cb460d15.js.map +0 -1
  79. package/dist/embedded-app/static/module-zod.dd7f5a90.js +0 -2
  80. package/dist/embedded-app/static/module-zod.dd7f5a90.js.map +0 -1
  81. package/dist/embedded-app/static/vendor.65e7f165.js +0 -6
  82. package/dist/embedded-app/static/vendor.65e7f165.js.map +0 -1
@@ -1,5 +0,0 @@
1
- "use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["2295"],{32725(e,a,t){t.d(a,{a:()=>u});var r=t(31085),l=t(14041),s=t(60621),i=t(75331),o=t(63690),n=t(68133);let c=(0,t(48119).p)()({styles:{"bui-ButtonIcon":"oswl8eimGwGMv65g","bui-ButtonIconContent":"nupI988ZoWQXN2ow","bui-ButtonIconSpinner":"S0ip8O7B0EhQCtAt","bui-spin":"wvp018_1ftcIUJUQ"},classNames:{root:"bui-ButtonIcon",content:"bui-ButtonIconContent",spinner:"bui-ButtonIconSpinner"},bg:"consumer",propDefs:{size:{dataAttribute:!0,default:"small"},variant:{dataAttribute:!0,default:"primary"},loading:{dataAttribute:!0},icon:{},className:{}}}),u=(0,l.forwardRef)((e,a)=>{let{ownProps:t,restProps:l,dataAttributes:u}=(0,n.Z)(c,e),{classes:d,icon:b,loading:h}=t;return(0,r.jsx)(s.$,{className:d.root,ref:a,isPending:h,...u,...l,children:({isPending:e})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:d.content,children:b}),e&&(0,r.jsx)(i.z,{"aria-label":"Loading",isIndeterminate:!0,className:d.spinner,children:(0,r.jsx)(o.xNY,{"aria-hidden":"true"})})]})})});u.displayName="ButtonIcon"},28822(e,a,t){t.d(a,{f:()=>o});var r=t(31085),l=t(31550),s=t(68133),i=t(52589);let o=e=>{let{ownProps:a,restProps:t}=(0,s.Z)(i.sv,e);return(0,r.jsx)(l.fh,{className:a.classes.root,...t})};o.displayName="Cell"},34567(e,a,t){t.d(a,{i:()=>c});var r=t(31085),l=t(69749),s=t(12860),i=t(31550),o=t(68133),n=t(52589);let c=e=>{let{ownProps:a,restProps:t}=(0,o.Z)(n.fO,e),{classes:c,title:u,description:d,color:b,leadingIcon:h,href:p}=a;return(0,r.jsx)(i.fh,{className:c.root,...t,children:(0,r.jsxs)("div",{className:c.cellContentWrapper,children:[h&&(0,r.jsx)("div",{className:c.cellIcon,children:h}),(0,r.jsxs)("div",{className:c.cellContent,children:[p?(0,r.jsx)(s.N,{href:p,variant:"body-medium",color:b,truncate:!0,title:u,children:u}):(0,r.jsx)(l.E,{as:"p",variant:"body-medium",color:b,truncate:!0,title:u,children:u}),d&&(0,r.jsx)(l.E,{variant:"body-medium",color:"secondary",truncate:!0,title:d,children:d})]})]})})};c.displayName="CellText"},34292(e,a,t){t.d(a,{V:()=>n});var r=t(31085),l=t(31550),s=t(68133),i=t(52589),o=t(63690);let n=e=>{let{ownProps:a,restProps:t}=(0,s.Z)(i.a9,e),{classes:n,children:c}=a;return(0,r.jsx)(l.VP,{className:n.root,...t,children:({allowsSorting:e})=>(0,r.jsxs)("div",{className:n.headContent,children:[(0,r.jsx)("span",{className:n.headLabel,children:c}),e&&(0,r.jsx)("span",{"aria-hidden":"true",className:n.headSortButton,children:(0,r.jsx)(o.avw,{size:16})})]})})}},66646(e,a,t){t.d(a,{X:()=>ec});var r=t(31085),l=t(13507),s=t(31550),i=t(36578),o=t(36348),n=t(68133),c=t(52589);let u=e=>{let{ownProps:a,restProps:t,dataAttributes:l}=(0,n.Z)(c.ul,e);return(0,r.jsx)(s.XI,{className:a.classes.root,"aria-label":"Data table","aria-busy":a.stale||a.loading,...l,...t})};var d=t(18907),b=t(14041),h=t(1477),p=t(48119);let m=(0,p.p)()({styles:{"bui-Checkbox":"hJtmqCNU8SMp97Lu","bui-CheckboxIndicator":"AsCZ8LTTAs5lRnNR"},classNames:{root:"bui-Checkbox",indicator:"bui-CheckboxIndicator"},propDefs:{children:{},className:{}}});var f=t(63690);let g=(0,b.forwardRef)((e,a)=>{let{ownProps:t,restProps:l,dataAttributes:s}=(0,n.Z)(m,e),{classes:i,children:o}=t,c=l["aria-label"],u=l["aria-labelledby"];return(0,b.useEffect)(()=>{o||c||u||console.warn("Checkbox requires either a visible label, aria-label, or aria-labelledby for accessibility")},[o,c,u]),(0,r.jsx)(h.Sc,{ref:a,className:i.root,...s,...l,children:({isIndeterminate:e})=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:i.indicator,"aria-hidden":"true",children:e?(0,r.jsx)(f.oev,{size:12}):(0,r.jsx)(f.s0,{size:12})}),null!=o&&(0,r.jsx)("div",{children:o})]})})});var v=t(34292),x=t(73880);let C=e=>{let{selectionBehavior:a,selectionMode:t}=(0,s.mz)(),{ownProps:l,restProps:i}=(0,n.Z)(c.P2,e),{classes:o,columns:u,children:b}=l;return(0,r.jsxs)(s.A0,{className:o.root,...i,children:["toggle"===a&&"multiple"===t&&(0,r.jsx)(v.V,{width:40,minWidth:40,maxWidth:40,className:o.headSelection,children:(0,r.jsx)(x.s,{justify:"center",align:"center","aria-label":"Row selection",children:(0,r.jsx)(g,{slot:"selection","aria-label":"Select all"})})}),(0,r.jsx)(d.pM,{items:u,children:b})]})},S=e=>{let{ownProps:a,restProps:t}=(0,n.Z)(c.kM,e);return(0,r.jsx)(s.BF,{className:a.classes.root,...t})};var N=t(83740),y=t(54357);function P(e){let{ownProps:a,restProps:t,dataAttributes:l,analytics:i}=(0,n.Z)(c.qZ,e),{classes:o,columns:u,children:b,href:h}=a,p=(0,N.i)(h),m=!!h&&!p,f=!!h&&p,v=!!t.onAction||!!h,C=f?"_blank":t.target,S="_blank"===C?[...new Set(["noopener","noreferrer",...t.rel?.split(/\s+/).filter(Boolean)??[]])].join(" "):t.rel,P=v?()=>{t.onAction?.(),h&&i.captureEvent("click",h,{attributes:{to:String(h)}})}:void 0,{selectionBehavior:j,selectionMode:w}=(0,s.mz)(),T=(0,r.jsxs)(r.Fragment,{children:["toggle"===j&&"multiple"===w&&(0,r.jsx)(s.fh,{className:(0,y.A)(o.cell,o.cellSelection),children:(0,r.jsx)(x.s,{justify:"center",align:"center",children:(0,r.jsx)(g,{slot:"selection","aria-label":"Select row"})})}),(0,r.jsx)(d.pM,{items:u,children:b})]});return(0,r.jsx)(s.fI,{href:h,...t,...l,target:C,rel:S,className:(0,y.A)(o.root,t.className),"data-react-aria-pressable":m?"true":void 0,onAction:P,children:T})}var j=t(69749),w=t(32725),T=t(61014),k=t(63999);let L={"bui-Select":"fl_o2cRttX8vIo5j","bui-SelectPopover":"xRoZ59Ta50wTyFbP","bui-SelectTrigger":"f6xSegNfnDAA591f","bui-SelectTriggerChevron":"hey3g7_Ll4EtTJdE","bui-SelectValue":"EOuke6Cxn9cos7ok","bui-SelectItemIndicator":"LiF4f9w5zcb_V5q_","bui-SelectList":"wCPzC0hbf30wVMOp","bui-SelectItem":"Mn7kwp0_L8g4rWcf","bui-SelectItemLabel":"sG8NrKzlnq4NyoHP","bui-SelectSearchWrapper":"af0jN5t2MnkzSKwM","bui-SelectSearch":"MAcGzHfmHVw4bkcS","bui-SelectSearchClear":"Qm0LMYJXqDozSs4J","bui-SelectNoResults":"mai_FHtvkacjqFtg"},z=(0,p.p)()({styles:L,classNames:{root:"bui-Select",popover:"bui-SelectPopover"},propDefs:{icon:{},size:{dataAttribute:!0,default:"small"},options:{},searchable:{},searchPlaceholder:{},label:{},secondaryLabel:{},description:{},isRequired:{},className:{}}}),D=(0,p.p)()({styles:L,classNames:{root:"bui-SelectTrigger",chevron:"bui-SelectTriggerChevron",value:"bui-SelectValue"},bg:"consumer",propDefs:{icon:{}}}),E=(0,p.p)()({styles:L,classNames:{root:"bui-SelectSearchWrapper",search:"bui-SelectSearch",searchClear:"bui-SelectSearchClear"},propDefs:{searchable:{},searchPlaceholder:{default:"Search..."},options:{}}}),I=(0,p.p)()({styles:L,classNames:{root:"bui-SelectList",item:"bui-SelectItem",itemIndicator:"bui-SelectItemIndicator",itemLabel:"bui-SelectItemLabel",noResults:"bui-SelectNoResults"},propDefs:{options:{}}}),A=(0,p.p)()({styles:{"bui-Popover":"c6K43dAXzUIQYTPO","bui-PopoverArrow":"nWNOVN9SSAkDCJc4","bui-PopoverContent":"ndXnur8atSwrX9tW"},classNames:{root:"bui-Popover",arrow:"bui-PopoverArrow",content:"bui-PopoverContent"},propDefs:{children:{},hideArrow:{},className:{}}});var R=t(36753);let F=(0,p.p)()({styles:{"bui-FieldLabelWrapper":"QCxpyIls6to9Bn5w","bui-FieldLabel":"qjnrgCeKosN0HGNG","bui-FieldSecondaryLabel":"VAD8KU3Enrs4kH_k","bui-FieldDescription":"KsFBKeDCTE86ZANx"},classNames:{root:"bui-FieldLabelWrapper",label:"bui-FieldLabel",secondaryLabel:"bui-FieldSecondaryLabel",description:"bui-FieldDescription"},propDefs:{label:{},secondaryLabel:{},description:{},htmlFor:{},id:{},descriptionId:{},className:{}}}),W=(0,b.forwardRef)((e,a)=>{let{ownProps:t,restProps:l}=(0,n.Z)(F,e),{classes:s,label:i,secondaryLabel:o,description:c,htmlFor:u,id:d,descriptionId:b}=t;return i?(0,r.jsxs)("div",{className:s.root,...l,ref:a,children:[i&&(0,r.jsxs)(R.J,{className:s.label,htmlFor:u,id:d,children:[i,o&&(0,r.jsxs)("span",{"aria-hidden":"true",className:s.secondaryLabel,children:["(",o,")"]})]}),c&&(0,r.jsx)("div",{className:s.description,id:b,children:c})]}):null});W.displayName="FieldLabel";var M=t(97035);let Z=(0,p.p)()({styles:{"bui-FieldError":"Ai9iNkHuNwQ8kqsz"},classNames:{root:"bui-FieldError"},propDefs:{className:{}}}),H=(0,b.forwardRef)((e,a)=>{let{ownProps:t,restProps:l}=(0,n.Z)(Z,e),{classes:s}=t;return(0,r.jsx)(M.b,{className:s.root,ref:a,...l})});H.displayName="FieldError";var B=t(60621);function O(e){let{ownProps:a,dataAttributes:t}=(0,n.Z)(D,e),{classes:l,icon:s}=a;return(0,r.jsxs)(B.$,{className:l.root,...t,children:[s,(0,r.jsx)(T.yv,{className:l.value}),(0,r.jsx)("div",{className:l.chevron,children:(0,r.jsx)(f.eQr,{"aria-hidden":"true"})})]})}var _=t(14897),q=t(22742),V=t(21143),$=t(19080),Q=t(6396),Y=t(40844);let K=()=>{let{ownProps:e}=(0,n.Z)(I,{}),{classes:a}=e;return(0,r.jsx)("div",{className:a.noResults,children:"No results found."})};function X(e){let{ownProps:a}=(0,n.Z)(I,e),{classes:t,options:l}=a;return(0,r.jsx)(Q.qF,{className:t.root,renderEmptyState:()=>(0,r.jsx)(K,{}),children:l?.map(e=>(0,r.jsxs)(Q.nh,{id:e.value,textValue:e.label,className:t.item,isDisabled:e.disabled,children:[(0,r.jsx)("div",{className:t.itemIndicator,children:(0,r.jsx)(f.s0,{})}),(0,r.jsx)(Y.E,{slot:"label",className:t.itemLabel,children:e.label})]},e.value))})}function G(e){let{contains:a}=(0,$.U)({sensitivity:"base"}),{ownProps:t}=(0,n.Z)(E,e),{classes:l,searchable:s,searchPlaceholder:i,options:o}=t;return s?(0,r.jsxs)(_.jT,{filter:a,children:[(0,r.jsxs)(q.L,{autoFocus:!0,className:l.root,"aria-label":i,children:[(0,r.jsx)(V.p,{placeholder:i,className:l.search}),(0,r.jsx)(B.$,{className:l.searchClear,children:(0,r.jsx)(f.qFd,{})})]}),(0,r.jsx)(X,{options:o})]}):(0,r.jsx)(X,{options:o})}let J=(0,b.forwardRef)((e,a)=>{let{ownProps:t,restProps:l,dataAttributes:s}=(0,n.Z)(z,{placeholder:"Select an option",...e}),{ownProps:i}=(0,n.Z)(A,{}),{classes:o,label:c,description:u,options:d,icon:h,searchable:p,searchPlaceholder:m,isRequired:f,secondaryLabel:g}=t,v=l["aria-label"],x=l["aria-labelledby"];return(0,b.useEffect)(()=>{c||v||x||console.warn("Select requires either a visible label, aria-label, or aria-labelledby for accessibility")},[c,v,x]),(0,r.jsxs)(T.l6,{className:o.root,...s,ref:a,...l,children:[(0,r.jsx)(W,{label:c,secondaryLabel:g||(f?"Required":null),description:u}),(0,r.jsx)(O,{icon:h}),(0,r.jsx)(H,{}),(0,r.jsx)(k.A,{className:(0,y.A)(i.classes.root,o.popover),...s,children:(0,r.jsx)(G,{searchable:p,searchPlaceholder:m,options:d})})]})});J.displayName="Select";let U=(0,p.p)()({styles:{"bui-TablePagination":"Z_Iagacz0F1YYG04","bui-TablePaginationLeft":"N_pRbW6lVsY4Hdgf","bui-TablePaginationRight":"qXYnm03BkEcKl1FA","bui-TablePaginationSelect":"plzZlLJyZhc3wn3s"},classNames:{root:"bui-TablePagination",left:"bui-TablePaginationLeft",right:"bui-TablePaginationRight",select:"bui-TablePaginationSelect"},propDefs:{pageSize:{},pageSizeOptions:{default:[{label:"Show 5 results",value:5},{label:"Show 10 results",value:10},{label:"Show 20 results",value:20},{label:"Show 30 results",value:30},{label:"Show 40 results",value:40},{label:"Show 50 results",value:50}]},offset:{},totalCount:{},hasNextPage:{},hasPreviousPage:{},onNextPage:{},onPreviousPage:{},onPageSizeChange:{},showPageSizeOptions:{default:!0},getLabel:{},showPaginationLabel:{default:!0}}});function ee(e){return"number"==typeof e?e:e.value}function ea(e){let{ownProps:a}=(0,n.Z)(U,e),{classes:t,pageSize:s,pageSizeOptions:i,offset:o,totalCount:c,hasNextPage:u,hasPreviousPage:d,onNextPage:h,onPreviousPage:p,onPageSizeChange:m,showPageSizeOptions:g,getLabel:v,showPaginationLabel:x}=a,C=(0,l.Bi)(),S=(0,b.useMemo)(()=>i.length>0&&"number"==typeof i[0]?i.map(e=>({label:`Show ${e} results`,value:e})):i,[i]),N=(0,b.useMemo)(()=>{if(i.some(e=>ee(e)===s))return s;let e=ee(i[0]);return console.warn(`TablePagination: pageSize ${s} is not in pageSizeOptions, using ${e} instead`),e},[s,i]),y=void 0!==c&&0!==c&&!1!==x,P=`${c} items`;if(v)P=v({pageSize:N,offset:o,totalCount:c});else if(void 0!==o){let e=o+1,a=Math.min(o+N,c??0);P=`${e} - ${a} of ${c}`}return(0,r.jsxs)("div",{className:t.root,children:[(0,r.jsx)("div",{className:t.left,children:g&&(0,r.jsx)(J,{name:"pageSize",size:"small","aria-label":"Select table page size",options:S.map(e=>({label:e.label,value:String(e.value)})),defaultValue:N.toString(),onChange:e=>{let a=Number(e);m?.(a)},className:t.select})}),(0,r.jsxs)("div",{className:t.right,children:[y&&(0,r.jsx)(j.E,{as:"p",variant:"body-medium",id:C,children:P}),(0,r.jsx)(w.a,{variant:"secondary",size:"small",onClick:p,isDisabled:!d,icon:(0,r.jsx)(f.vMW,{}),"aria-label":"Previous table page","aria-describedby":y?C:void 0}),(0,r.jsx)(w.a,{variant:"secondary",size:"small",onClick:h,isDisabled:!u,icon:(0,r.jsx)(f.ye6,{}),"aria-label":"Next table page","aria-describedby":y?C:void 0})]})]})}var et=t(82604),er=t(28822);let el=(0,p.p)()({styles:{"bui-Skeleton":"dQdXlDCvsLk1w8Z3"},classNames:{root:"bui-Skeleton"},propDefs:{width:{default:80},height:{default:24},rounded:{dataAttribute:!0,default:!1},className:{},style:{}}}),es=e=>{let{ownProps:a,restProps:t,dataAttributes:l}=(0,n.Z)(el,e),{classes:s,width:i,height:o,style:c}=a;return(0,r.jsx)("div",{className:s.root,...l,style:{width:i,height:o,...c},...t})},ei=["75%","50%","60%","45%","70%"],eo=Array.from({length:5},(e,a)=>({id:`skeleton-${a}`}));function en({columns:e}){return(0,r.jsx)(S,{items:eo,dependencies:[e],children:a=>{let t=Number(a.id.split("-")[1]);return(0,r.jsx)(P,{id:a.id,columns:e,children:a=>(0,r.jsx)(er.f,{"aria-hidden":"true",children:(0,r.jsx)(es,{width:ei[(t+e.indexOf(a))%ei.length]})},a.id)})}})}function ec({columnConfig:e,data:a,loading:t=!1,isStale:d=!1,error:h,pagination:p,sort:m,rowConfig:f,selection:g,emptyState:N,className:y,style:j,virtualized:w}){let T,{ownProps:{classes:k}}=(0,n.Z)(c.Lu,{className:y}),L=(0,l.Bi)(),z=(0,b.useMemo)(()=>e.filter(e=>!e.isHidden),[e]),D=function({data:e,rowConfig:a}){return(0,b.useMemo)(()=>{if(e&&"function"!=typeof a&&a?.getIsDisabled)return e.reduce((e,t)=>(a.getIsDisabled?.(t)&&e.add(String(t.id)),e),new Set)},[e,a])}({data:a,rowConfig:f}),{mode:E,selected:I,behavior:A,onSelectionChange:R}=g||{},F=t&&!a;if(h)return(0,r.jsxs)("div",{className:k.root,style:j,children:["Error: ",h.message]});let W=function(e,a,t,r){if(t)return"Loading table data.";if(!r||"none"===e.type)return"";let{pageSize:l,offset:s,totalCount:i,getLabel:o}=e;if(a)return"Loading table data.";let n="Table page loaded. ";if(o)n+=o({pageSize:l,offset:s,totalCount:i});else if(void 0!==s){let e=s+1,a=Math.min(s+l,i??0);n+=`Showing ${e} to ${a} of ${i}`}return n}(p,d,F,void 0!==a),M=e.some(e=>null!=e.width||null!=e.minWidth||null!=e.maxWidth||null!=e.defaultWidth)?e=>(0,r.jsx)(s.tk,{className:k.resizableContainer,children:e}):e=>(0,r.jsx)(r.Fragment,{children:e});return(0,r.jsxs)("div",{className:k.root,style:j,children:[(0,r.jsx)(et.s,{"aria-live":"polite",id:L,children:W}),M((T=(0,r.jsxs)(u,{...F?{}:{selectionMode:E,selectionBehavior:A,selectedKeys:I,onSelectionChange:R},sortDescriptor:m?.descriptor??void 0,onSortChange:m?.onSortChange,disabledKeys:D,stale:d,loading:F,"aria-describedby":L,children:[(0,r.jsx)(C,{columns:z,children:e=>e.header?e.header():(0,r.jsx)(v.V,{id:e.id,isRowHeader:e.isRowHeader,allowsSorting:e.isSortable,width:e.width,defaultWidth:e.defaultWidth,minWidth:e.minWidth,maxWidth:e.maxWidth,children:e.label})}),F?(0,r.jsx)(en,{columns:z}):(0,r.jsx)(S,{items:a,dependencies:[z],renderEmptyState:N?()=>(0,r.jsx)(x.s,{p:"3",children:N}):void 0,children:e=>{let t=a?.indexOf(e)??-1;return"function"==typeof f?f({item:e,index:t}):(0,r.jsx)(P,{id:String(e.id),columns:z,href:f?.getHref?.(e),onAction:f?.onClick?()=>f?.onClick?.(e):void 0,children:a=>a.cell(e)})}})]}),w?(0,r.jsx)(i.Y,{layout:o.$,layoutOptions:"object"==typeof w?w:void 0,children:T}):T)),"page"===p.type&&(0,r.jsx)(ea,{pageSize:p.pageSize,pageSizeOptions:p.pageSizeOptions,offset:p.offset,totalCount:p.totalCount,hasNextPage:p.hasNextPage,hasPreviousPage:p.hasPreviousPage,onNextPage:p.onNextPage,onPreviousPage:p.onPreviousPage,onPageSizeChange:p.onPageSizeChange,showPageSizeOptions:p.showPageSizeOptions,getLabel:p.getLabel,showPaginationLabel:p.showPaginationLabel})]})}},52589(e,a,t){t.d(a,{sv:()=>d,ul:()=>i,qZ:()=>c,kM:()=>n,P2:()=>o,Lu:()=>s,fO:()=>b,a9:()=>u});var r=t(48119);let l={"bui-TableWrapper":"v8W8N2dqiE5cGNxm","bui-TableResizableContainer":"Q3dVWKchqFEGDxNm","bui-Table":"kHZPXvGYPYAGYFhf","bui-TableHeader":"oifZQr6gC_QyhRzd","bui-TableHead":"X8xcDL8E6rIYbeSR","bui-TableHeadSelection":"ae9pE72Zc07f8L6W","bui-TableHeadContent":"d_1Lwe7cMab7Y7x8","bui-TableHeadLabel":"c2mE5YTadTwCB9Cv","bui-TableHeadSortButton":"U0p16BfATSMI0pZa","bui-TableBody":"RevIL7d7UeIjyBcV","bui-TableRow":"kPJhRwYa5RAAhwxF","bui-TableCell":"lBJ1evBwz18CSuEb","bui-TableCellSelection":"waN8m81er3MmoNwQ","bui-TableCellContentWrapper":"AQrmv2_3dWQm8mkC","bui-TableCellIcon":"pZfxgqebmIQNGPFo","bui-TableCellContent":"VL_PIHABTKklOpWr","bui-TableCellProfile":"qco3EFeJwhQRop02"},s=(0,r.p)()({styles:l,classNames:{root:"bui-TableWrapper",resizableContainer:"bui-TableResizableContainer"},propDefs:{className:{}}}),i=(0,r.p)()({styles:l,classNames:{root:"bui-Table"},propDefs:{stale:{dataAttribute:!0},loading:{dataAttribute:!0}}}),o=(0,r.p)()({styles:l,classNames:{root:"bui-TableHeader",headSelection:"bui-TableHeadSelection"},propDefs:{columns:{},children:{}}}),n=(0,r.p)()({styles:l,classNames:{root:"bui-TableBody"},propDefs:{}}),c=(0,r.p)()({styles:l,resolveHref:!0,analytics:!0,bg:"consumer",classNames:{root:"bui-TableRow",cell:"bui-TableCell",cellSelection:"bui-TableCellSelection"},propDefs:{columns:{},children:{},href:{},noTrack:{}}}),u=(0,r.p)()({styles:l,classNames:{root:"bui-TableHead",headContent:"bui-TableHeadContent",headLabel:"bui-TableHeadLabel",headSortButton:"bui-TableHeadSortButton"},propDefs:{children:{},className:{}}}),d=(0,r.p)()({styles:l,classNames:{root:"bui-TableCell"},propDefs:{className:{}}}),b=(0,r.p)()({styles:l,resolveHref:!0,classNames:{root:"bui-TableCell",cellContentWrapper:"bui-TableCellContentWrapper",cellContent:"bui-TableCellContent",cellIcon:"bui-TableCellIcon"},propDefs:{title:{},description:{},color:{default:"primary"},leadingIcon:{},href:{},className:{}}});(0,r.p)()({styles:l,resolveHref:!0,classNames:{root:"bui-TableCell",cellContentWrapper:"bui-TableCellContentWrapper",cellContent:"bui-TableCellContent"},propDefs:{src:{},name:{},href:{},description:{},color:{default:"primary"},className:{}}})},81262(e,a,t){t.d(a,{K:()=>p});var r=t(14041);function l(e,a,t){let[l,s]=(0,r.useState)(e);return[void 0!==a?a:l,(0,r.useCallback)(e=>{void 0===a&&s(e),t&&t(e)},[a,t])]}function s(e){let a=(0,r.useRef)(e);return a.current=e,(0,r.useCallback)((...e)=>a.current(...e),[])}function i(e){return"number"==typeof e?e:e.value}function o(e){let{pageSize:a,pageSizeOptions:t}=e;if(!t)return a??20;let r=i(t[0]);return void 0===a?r:t.some(e=>i(e)===a)?a:(console.warn(`useTable: pageSize ${a} is not in pageSizeOptions, using ${r} instead`),r)}let n=Symbol("firstPage");class c{cache=new Map;get(e){return this.cache.get(e)}getOrCreate(e){let a=this.cache.get(e);if(a)return a;let t={data:void 0,nextCursor:void 0,prevCursor:void 0};return this.cache.set(e,t),t}clear(){this.cache.clear()}getTargetCursor(e,a,t){if("mount"===e)return u(t);if("reset"===e)return n;if("refresh"===e)return a;let r=this.cache.get(a);if(r)return"next"===e?r.nextCursor:r.prevCursor}linkEntryToSource(e,a,t){"next"===a?e.prevCursor=t:"prev"===a&&(e.nextCursor=t)}}function u(e){return void 0===e?n:e}function d(e){return e===n?void 0:e}function b(e){let{getData:a,initialCurrentCursor:t}=e,[l,s]=(0,r.useState)(()=>u(t)),i=(0,r.useRef)(new c).current,[o,n]=(0,r.useState)(!0),[b,h]=(0,r.useState)(void 0),[p,m]=(0,r.useState)(void 0),f=(0,r.useRef)(null),g=i.get(l),v=g?.data,x=g?.nextCursor!==void 0,C=g?.prevCursor!==void 0,S=(0,r.useCallback)(async e=>{let r=i.getTargetCursor(e,l,t);if(!r)return;let o=i.get(r);if(o?.data!==void 0)return void s(r);let c=i.getOrCreate(r);i.linkEntryToSource(c,e,l),s(r),f.current&&f.current.abort();let u=new AbortController;f.current=u,n(!0),h(void 0);try{let e=await a({cursor:d(r),signal:u.signal});if(u.signal.aborted)return;c.data=e.data,void 0===c.nextCursor&&void 0!==e.nextCursor&&(c.nextCursor=e.nextCursor),void 0===c.prevCursor&&void 0!==e.prevCursor&&(c.prevCursor=e.prevCursor),void 0!==e.totalCount&&m(e.totalCount),n(!1)}catch(e){if(u.signal.aborted)return;h(e instanceof Error?e:Error(String(e))),n(!1)}},[a,t,l,i]);(0,r.useEffect)(()=>(S("mount"),()=>{f.current&&f.current.abort()}),[]);let N=(0,r.useCallback)(()=>{if(o)return;let e=i.get(l);e?.nextCursor&&S("next")},[o,l,S,i]),y=(0,r.useCallback)(()=>{if(o)return;let e=i.get(l);e?.prevCursor&&S("prev")},[o,l,S,i]),P=(0,r.useCallback)(e=>{f.current&&f.current.abort(),i.clear(),S(e?.keepCurrentCursor?"refresh":"reset")},[S,i]);return{loading:o,error:b,data:v,totalCount:p,currentCursor:d(l),hasPreviousPage:C,onPreviousPage:y,hasNextPage:x,onNextPage:N,reload:P}}function h(e,a,t,l=200){let s=(0,r.useRef)({query:e,pageSize:a});(0,r.useEffect)(()=>{let r=s.current;if(r.query!==e||r.pageSize!==a){s.current={query:e,pageSize:a};let r=setTimeout(t,l);return()=>clearTimeout(r)}},[e,a,t,l])}function p(e){let a,t=function(e){let[a,t]=l(e.initialSort??null,e.sort,e.onSortChange),[s,i]=l(e.initialFilter,e.filter,e.onFilterChange),[o,n]=l(e.initialSearch??"",e.search,e.onSearchChange);return(0,r.useMemo)(()=>({sort:a,setSort:t,filter:s,setFilter:i,search:o,setSearch:n}),[a,t,s,i,o,n])}(e),i=(0,r.useRef)(e.mode);if(i.current!==e.mode)throw Error(`useTable mode cannot change from '${i.current}' to '${e.mode}'. The mode must remain stable for the lifetime of the component.`);if("complete"===e.mode)a=function(e,a){let{data:t,getData:l=()=>[],paginationOptions:i={},sortFn:n,filterFn:c,searchFn:u}=e,d="getData"in e,b="none"===i.type,{initialOffset:h=0}=i,p=b?1/0:o(i),m=s(l),{sort:f,filter:g,search:v}=a,[x,C]=(0,r.useState)(void 0),[S,N]=(0,r.useState)(!t),[y,P]=(0,r.useState)(void 0),[j,w]=(0,r.useState)(0),[T,k]=(0,r.useState)(h),[L,z]=(0,r.useState)(p);(0,r.useEffect)(()=>{z(p),k(0)},[p]),(0,r.useEffect)(()=>{if(t)return void N(!1);if(!d)return;let e=!1;return N(!0),P(void 0),(async()=>{try{let a=m(),t=a instanceof Promise?await a:a;e||(C(t),N(!1))}catch(a){e||(P(a instanceof Error?a:Error(String(a))),N(!1))}})(),()=>{e=!0}},[t,m,d,j]);let D=(0,r.useRef)(a);(0,r.useEffect)(()=>{D.current!==a&&(D.current=a,k(0))},[a]);let E=(0,r.useMemo)(()=>t??x,[t,x]),I=(0,r.useMemo)(()=>{if(!E)return;let e=[...E];return void 0!==g&&c&&(e=c(e,g)),v&&u&&(e=u(e,v)),f&&n&&(e=n(e,f)),e},[E,f,g,v,c,u,n]),A=I?.length??0,R=(0,r.useMemo)(()=>b?I:I?.slice(T,T+L),[I,T,L,b]),F=!b&&T+L<A,W=!b&&T>0,M=(0,r.useCallback)(()=>{T+L<A&&k(T+L)},[T,L,A]),Z=(0,r.useCallback)(()=>{T>0&&k(Math.max(0,T-L))},[T,L]);return{data:R,loading:S,error:y,totalCount:A,offset:T,pageSize:L,hasNextPage:F,hasPreviousPage:W,onNextPage:M,onPreviousPage:Z,onPageSizeChange:(0,r.useCallback)(e=>{z(e),k(0)},[]),reload:(0,r.useCallback)(()=>{k(0),w(e=>e+1)},[])}}(e,t);else if("offset"===e.mode)a=function(e,a){let{getData:t,paginationOptions:l={}}=e,{initialOffset:i=0}=l,n=o(l),c=s(t),{sort:u,filter:d,search:p}=a,[m,f]=(0,r.useState)(n),g=b({getData:(0,r.useCallback)(async({cursor:e,signal:a})=>{let t=e??0,r=await c({offset:t,pageSize:m,sort:u,filter:d,search:p,signal:a}),l=t>0?Math.max(0,t-m):void 0,s=t+m<r.totalCount?t+m:void 0;return{data:r.data,prevCursor:l,nextCursor:s,totalCount:r.totalCount}},[c,m,u,d,p]),initialCurrentCursor:i>0?i:void 0});h(a,m,g.reload);let v=(0,r.useCallback)(e=>f(e),[]);return{data:g.data,loading:g.loading,error:g.error,totalCount:g.totalCount,offset:g.currentCursor??0,pageSize:m,hasNextPage:g.hasNextPage,hasPreviousPage:g.hasPreviousPage,onNextPage:g.onNextPage,onPreviousPage:g.onPreviousPage,onPageSizeChange:v,reload:g.reload}}(e,t);else if("cursor"===e.mode)a=function(e,a){let{getData:t,paginationOptions:l={}}=e,i=o(l),n=s(t),{sort:c,filter:u,search:d}=a,[p,m]=(0,r.useState)(i),f=b({getData:(0,r.useCallback)(async({cursor:e,signal:a})=>{let t=await n({cursor:e,pageSize:p,sort:c,filter:u,search:d,signal:a});return{data:t.data,prevCursor:t.prevCursor,nextCursor:t.nextCursor,totalCount:t.totalCount}},[n,p,c,u,d])});h(a,p,f.reload);let g=(0,r.useCallback)(e=>m(e),[]);return{data:f.data,loading:f.loading,error:f.error,totalCount:f.totalCount,offset:void 0,pageSize:p,hasNextPage:f.hasNextPage,hasPreviousPage:f.hasPreviousPage,onNextPage:f.onNextPage,onPreviousPage:f.onPreviousPage,onPageSizeChange:g,reload:f.reload}}(e,t);else throw Error("Invalid mode");return{tableProps:function(e,a,t={}){let{showPageSizeOptions:l=!0,pageSizeOptions:s,onPageSizeChange:i,onNextPage:o,onPreviousPage:n,getLabel:c,showPaginationLabel:u}=t,d=(0,r.useRef)(e.data);e.data&&(d.current=e.data);let b=e.data??d.current,h=e.loading&&void 0!==b,p=(0,r.useMemo)(()=>"none"===t.type?{type:"none"}:{type:"page",pageSize:e.pageSize,pageSizeOptions:s,offset:e.offset,totalCount:e.totalCount,hasNextPage:e.hasNextPage,hasPreviousPage:e.hasPreviousPage,onNextPage:()=>{e.onNextPage(),o?.()},onPreviousPage:()=>{e.onPreviousPage(),n?.()},onPageSizeChange:a=>{e.onPageSizeChange(a),i?.(a)},showPageSizeOptions:l,getLabel:c,showPaginationLabel:u},[t.type,e.pageSize,s,e.offset,e.totalCount,e.hasNextPage,e.hasPreviousPage,e.onNextPage,e.onPreviousPage,e.onPageSizeChange,o,n,i,l,c,u]);return(0,r.useMemo)(()=>({data:b,loading:e.loading,isStale:h,error:e.error,pagination:p,sort:a}),[b,e.loading,h,e.error,p,a])}(a,(0,r.useMemo)(()=>({descriptor:t.sort,onSortChange:t.setSort}),[t.sort,t.setSort]),e.paginationOptions??{}),reload:a.reload,filter:{value:t.filter,onChange:t.setFilter},search:{value:t.search,onChange:t.setSearch}}}},17693(e,a,t){t.d(a,{EntityLabelsCard:()=>x});var r=t(31085),l=t(22845),s=t(25390),i=t(64947),o=t(72501),n=t(58837),c=t(4809),u=t(50010),d=t(89595);let b=`metadata:
2
- name: example
3
- labels:
4
- javaVersion: 1.2.3`,h=(0,n.A)(e=>({code:{borderRadius:6,margin:e.spacing(2,0),background:"dark"===e.palette.type?"#444":e.palette.common.white}}),{name:"PluginCatalogEntityLabelsEmptyState"});function p(){let e=h(),{t:a}=(0,d.i)(u.W);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.A,{variant:"body1",children:a("entityLabelsCard.emptyDescription")}),(0,r.jsx)("div",{className:e.code,children:(0,r.jsx)(c.z,{text:b,language:"yaml",showLineNumbers:!0,highlightedNumbers:[3,4,5,6],customStyle:{background:"inherit",fontSize:"115%"}})}),(0,r.jsx)(i.A,{variant:"contained",color:"primary",target:"_blank",href:"https://backstage.io/docs/features/software-catalog/descriptor-format#labels-optional",children:a("entityLabelsCard.readMoreButtonTitle")})]})}var m=t(34567),f=t(81262),g=t(66646),v=t(14041);let x=e=>{let{title:a}=e,{entity:t}=(0,l.tN)(),{t:i}=(0,d.i)(u.W),o=t?.metadata?.labels,n=(0,v.useMemo)(()=>[{id:"key",label:i("entityLabelsCard.columnKeyLabel"),isRowHeader:!0,cell:e=>(0,r.jsx)(m.i,{title:e.key})},{id:"value",label:i("entityLabelsCard.columnValueLabel"),cell:e=>(0,r.jsx)(m.i,{title:e.value})}],[i]),c=(0,v.useMemo)(()=>Object.keys(o??{}).map(e=>({id:e,key:e,value:o[e]})),[o]),{tableProps:b}=(0,f.K)({mode:"complete",data:c,paginationOptions:{pageSize:5}});return(0,r.jsx)(s.o,{title:a||i("entityLabelsCard.title"),children:o&&0!==Object.keys(o).length?(0,r.jsx)(g.X,{columnConfig:n,...b}):(0,r.jsx)(p,{})})}}}]);
5
- //# sourceMappingURL=2295.765b9f2e.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/2295.765b9f2e.chunk.js","sources":["webpack://techdocs-cli-embedded-app/../ui/src/components/ButtonIcon/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/ButtonIcon/ButtonIcon.module.css?cd9c","webpack://techdocs-cli-embedded-app/../ui/src/components/ButtonIcon/ButtonIcon.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/components/Cell.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/components/CellText.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/components/Column.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/components/TableRoot.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Checkbox/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Checkbox/Checkbox.module.css?40f4","webpack://techdocs-cli-embedded-app/../ui/src/components/Checkbox/Checkbox.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/components/TableHeader.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/components/TableBody.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/components/Row.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Select/Select.module.css?4ca6","webpack://techdocs-cli-embedded-app/../ui/src/components/Select/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Popover/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Popover/Popover.module.css?5c0e","webpack://techdocs-cli-embedded-app/../ui/src/components/FieldLabel/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/FieldLabel/FieldLabel.module.css?90c3","webpack://techdocs-cli-embedded-app/../ui/src/components/FieldLabel/FieldLabel.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/FieldError/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/FieldError/FieldError.module.css?1045","webpack://techdocs-cli-embedded-app/../ui/src/components/FieldError/FieldError.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Select/SelectTrigger.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Select/SelectListBox.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Select/SelectContent.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Select/Select.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/TablePagination/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/TablePagination/TablePagination.module.css?4197","webpack://techdocs-cli-embedded-app/../ui/src/components/TablePagination/TablePagination.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Skeleton/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Skeleton/Skeleton.module.css?994a","webpack://techdocs-cli-embedded-app/../ui/src/components/Skeleton/Skeleton.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/components/TableBodySkeleton.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/components/Table.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/Table.module.css?cce8","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/hooks/useQueryState.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/hooks/useStableCallback.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/hooks/getEffectivePageSize.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/hooks/usePageCache.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/hooks/useDebouncedReload.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/hooks/useTable.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/hooks/useCompletePagination.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/hooks/useOffsetPagination.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Table/hooks/useCursorPagination.ts","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/components/EntityLabelsCard/EntityLabelsCard.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type { ButtonIconOwnProps } from './types';\nimport styles from './ButtonIcon.module.css';\n\n/**\n * Component definition for ButtonIcon\n * @public\n */\nexport const ButtonIconDefinition = defineComponent<ButtonIconOwnProps>()({\n styles,\n classNames: {\n root: 'bui-ButtonIcon',\n content: 'bui-ButtonIconContent',\n spinner: 'bui-ButtonIconSpinner',\n },\n bg: 'consumer',\n propDefs: {\n size: { dataAttribute: true, default: 'small' },\n variant: { dataAttribute: true, default: 'primary' },\n loading: { dataAttribute: true },\n icon: {},\n className: {},\n },\n});\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-ButtonIcon\":\"oswl8eimGwGMv65g\",\"bui-ButtonIconContent\":\"nupI988ZoWQXN2ow\",\"bui-ButtonIconSpinner\":\"S0ip8O7B0EhQCtAt\",\"bui-spin\":\"wvp018_1ftcIUJUQ\"};","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { forwardRef, Ref } from 'react';\nimport { Button as RAButton, ProgressBar } from 'react-aria-components';\nimport { RiLoader4Line } from '@remixicon/react';\nimport type { ButtonIconProps } from './types';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { ButtonIconDefinition } from './definition';\n\n/**\n * An icon-only button that supports a loading state and requires an accessible label.\n *\n * @public\n */\nexport const ButtonIcon = forwardRef(\n (props: ButtonIconProps, ref: Ref<HTMLButtonElement>) => {\n const { ownProps, restProps, dataAttributes } = useDefinition(\n ButtonIconDefinition,\n props,\n );\n const { classes, icon, loading } = ownProps;\n\n return (\n <RAButton\n className={classes.root}\n ref={ref}\n isPending={loading}\n {...dataAttributes}\n {...restProps}\n >\n {({ isPending }) => (\n <>\n <span className={classes.content}>{icon}</span>\n\n {isPending && (\n <ProgressBar\n aria-label=\"Loading\"\n isIndeterminate\n className={classes.spinner}\n >\n <RiLoader4Line aria-hidden=\"true\" />\n </ProgressBar>\n )}\n </>\n )}\n </RAButton>\n );\n },\n);\n\nButtonIcon.displayName = 'ButtonIcon';\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Cell as ReactAriaCell } from 'react-aria-components';\nimport type { CellProps } from '../types';\nimport { useDefinition } from '../../../hooks/useDefinition';\nimport { CellDefinition } from '../definition';\n\n/**\n * A low-level table cell primitive for building custom cell content.\n * For standard use cases, prefer `CellText` or `CellProfile`.\n *\n * @public\n */\nconst Cell = (props: CellProps) => {\n const { ownProps, restProps } = useDefinition(CellDefinition, props);\n\n return <ReactAriaCell className={ownProps.classes.root} {...restProps} />;\n};\n\nCell.displayName = 'Cell';\n\nexport { Cell };\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Text } from '../../Text';\nimport { Link } from '../../Link';\nimport { Cell as ReactAriaCell } from 'react-aria-components';\nimport type { CellTextProps } from '../types';\nimport { useDefinition } from '../../../hooks/useDefinition';\nimport { CellTextDefinition } from '../definition';\n\n/**\n * A table cell that renders a primary text title with an optional secondary description, leading icon, and link.\n *\n * @public\n */\nconst CellText = (props: CellTextProps) => {\n const { ownProps, restProps } = useDefinition(CellTextDefinition, props);\n const { classes, title, description, color, leadingIcon, href } = ownProps;\n\n return (\n <ReactAriaCell className={classes.root} {...restProps}>\n <div className={classes.cellContentWrapper}>\n {leadingIcon && <div className={classes.cellIcon}>{leadingIcon}</div>}\n <div className={classes.cellContent}>\n {href ? (\n <Link\n href={href}\n variant=\"body-medium\"\n color={color}\n truncate\n title={title}\n >\n {title}\n </Link>\n ) : (\n <Text\n as=\"p\"\n variant=\"body-medium\"\n color={color}\n truncate\n title={title}\n >\n {title}\n </Text>\n )}\n {description && (\n <Text\n variant=\"body-medium\"\n color=\"secondary\"\n truncate\n title={description}\n >\n {description}\n </Text>\n )}\n </div>\n </div>\n </ReactAriaCell>\n );\n};\n\nCellText.displayName = 'CellText';\n\nexport { CellText };\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Column as ReactAriaColumn } from 'react-aria-components';\nimport { useDefinition } from '../../../hooks/useDefinition';\nimport { ColumnDefinition } from '../definition';\nimport { ColumnProps } from '../types';\nimport { RiArrowUpLine } from '@remixicon/react';\n\n/**\n * A table column header cell with an optional sort toggle and support for resizable widths.\n *\n * @public\n */\nexport const Column = (props: ColumnProps) => {\n const { ownProps, restProps } = useDefinition(ColumnDefinition, props);\n const { classes, children } = ownProps;\n\n return (\n <ReactAriaColumn className={classes.root} {...restProps}>\n {({ allowsSorting }) => (\n <div className={classes.headContent}>\n <span className={classes.headLabel}>{children}</span>\n {allowsSorting && (\n <span aria-hidden=\"true\" className={classes.headSortButton}>\n <RiArrowUpLine size={16} />\n </span>\n )}\n </div>\n )}\n </ReactAriaColumn>\n );\n};\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useDefinition } from '../../../hooks/useDefinition';\nimport { TableDefinition } from '../definition';\nimport { Table as ReactAriaTable } from 'react-aria-components';\nimport { TableRootProps } from '../types';\n\n/**\n * The low-level table root element for building custom table layouts from atomic components.\n * For most use cases, prefer the `Table` convenience wrapper.\n *\n * @public\n */\nexport const TableRoot = (props: TableRootProps) => {\n const { ownProps, restProps, dataAttributes } = useDefinition(\n TableDefinition,\n props,\n );\n\n return (\n <ReactAriaTable\n className={ownProps.classes.root}\n aria-label=\"Data table\"\n aria-busy={ownProps.stale || ownProps.loading}\n {...dataAttributes}\n {...restProps}\n />\n );\n};\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type { CheckboxOwnProps } from './types';\nimport styles from './Checkbox.module.css';\n\n/**\n * Component definition for Checkbox\n * @public\n */\nexport const CheckboxDefinition = defineComponent<CheckboxOwnProps>()({\n styles,\n classNames: {\n root: 'bui-Checkbox',\n indicator: 'bui-CheckboxIndicator',\n },\n propDefs: {\n children: {},\n className: {},\n },\n});\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-Checkbox\":\"hJtmqCNU8SMp97Lu\",\"bui-CheckboxIndicator\":\"AsCZ8LTTAs5lRnNR\"};","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { forwardRef, useEffect } from 'react';\nimport { Checkbox as RACheckbox } from 'react-aria-components';\nimport type { CheckboxProps } from './types';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { CheckboxDefinition } from './definition';\nimport { RiCheckLine, RiSubtractLine } from '@remixicon/react';\n\n/**\n * A form checkbox input with support for indeterminate state and accessible labeling.\n *\n * @public\n */\nexport const Checkbox = forwardRef<HTMLLabelElement, CheckboxProps>(\n (props, ref) => {\n const { ownProps, restProps, dataAttributes } = useDefinition(\n CheckboxDefinition,\n props,\n );\n const { classes, children } = ownProps;\n const ariaLabel = restProps['aria-label'];\n const ariaLabelledBy = restProps['aria-labelledby'];\n\n useEffect(() => {\n if (!children && !ariaLabel && !ariaLabelledBy) {\n console.warn(\n 'Checkbox requires either a visible label, aria-label, or aria-labelledby for accessibility',\n );\n }\n }, [children, ariaLabel, ariaLabelledBy]);\n\n return (\n <RACheckbox\n ref={ref}\n className={classes.root}\n {...dataAttributes}\n {...restProps}\n >\n {({ isIndeterminate }) => (\n <>\n <div className={classes.indicator} aria-hidden=\"true\">\n {isIndeterminate ? (\n <RiSubtractLine size={12} />\n ) : (\n <RiCheckLine size={12} />\n )}\n </div>\n {children != null && <div>{children}</div>}\n </>\n )}\n </RACheckbox>\n );\n },\n);\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n TableHeader as ReactAriaTableHeader,\n Collection,\n useTableOptions,\n} from 'react-aria-components';\nimport { Checkbox } from '../../Checkbox';\nimport { Column } from './Column';\nimport { useDefinition } from '../../../hooks/useDefinition';\nimport { TableHeaderDefinition } from '../definition';\nimport type { TableHeaderProps } from '../types';\nimport { Flex } from '../../Flex';\n\n/**\n * The header row of a table, rendering column labels and an optional select-all checkbox for toggle selection mode.\n *\n * @public\n */\nexport const TableHeader = <T extends object>(props: TableHeaderProps<T>) => {\n let { selectionBehavior, selectionMode } = useTableOptions();\n\n const { ownProps, restProps } = useDefinition(TableHeaderDefinition, props);\n const { classes, columns, children } = ownProps;\n\n return (\n <ReactAriaTableHeader className={classes.root} {...restProps}>\n {selectionBehavior === 'toggle' && selectionMode === 'multiple' && (\n <Column\n width={40}\n minWidth={40}\n maxWidth={40}\n className={classes.headSelection}\n >\n <Flex justify=\"center\" align=\"center\" aria-label=\"Row selection\">\n <Checkbox slot=\"selection\" aria-label=\"Select all\" />\n </Flex>\n </Column>\n )}\n <Collection items={columns}>{children}</Collection>\n </ReactAriaTableHeader>\n );\n};\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TableBody as ReactAriaTableBody } from 'react-aria-components';\nimport { useDefinition } from '../../../hooks/useDefinition';\nimport { TableBodyDefinition } from '../definition';\nimport type { TableBodyProps } from '../types';\n\n/**\n * The body section of a table that renders data rows from the provided items collection.\n *\n * @public\n */\nexport const TableBody = <T extends object>(props: TableBodyProps<T>) => {\n const { ownProps, restProps } = useDefinition(TableBodyDefinition, props);\n\n return (\n <ReactAriaTableBody className={ownProps.classes.root} {...restProps} />\n );\n};\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Row as ReactAriaRow,\n useTableOptions,\n Cell as ReactAriaCell,\n Collection,\n} from 'react-aria-components';\nimport { Checkbox } from '../../Checkbox';\nimport { useDefinition } from '../../../hooks/useDefinition';\nimport { RowDefinition } from '../definition';\nimport type { RowProps } from '../types';\nimport { isExternalLink } from '../../../utils/linkUtils';\nimport clsx from 'clsx';\nimport { Flex } from '../../Flex';\n\n/**\n * A table row that can optionally act as a navigation link or trigger an action when clicked, with analytics tracking.\n *\n * @public\n */\nexport function Row<T extends object>(props: RowProps<T>) {\n const { ownProps, restProps, dataAttributes, analytics } = useDefinition(\n RowDefinition,\n props,\n );\n const { classes, columns, children, href } = ownProps;\n const isExternal = isExternalLink(href);\n const hasInternalHref = !!href && !isExternal;\n const hasExternalHref = !!href && isExternal;\n const hasInteraction = !!restProps.onAction || !!href;\n\n // Derive the effective target, defaulting to _blank for external links.\n const effectiveTarget = hasExternalHref ? '_blank' : restProps.target;\n // Always include noopener noreferrer when target=_blank, merging any\n // consumer-provided rel tokens to avoid reverse-tabnabbing risk.\n const effectiveRel =\n effectiveTarget === '_blank'\n ? [\n ...new Set([\n 'noopener',\n 'noreferrer',\n ...(restProps.rel?.split(/\\s+/).filter(Boolean) ?? []),\n ]),\n ].join(' ')\n : restProps.rel;\n\n const handlePress = hasInteraction\n ? () => {\n restProps.onAction?.();\n if (href) {\n analytics.captureEvent('click', href, {\n attributes: { to: String(href) },\n });\n }\n }\n : undefined;\n\n let { selectionBehavior, selectionMode } = useTableOptions();\n\n const content = (\n <>\n {selectionBehavior === 'toggle' && selectionMode === 'multiple' && (\n <ReactAriaCell className={clsx(classes.cell, classes.cellSelection)}>\n <Flex justify=\"center\" align=\"center\">\n <Checkbox slot=\"selection\" aria-label=\"Select row\" />\n </Flex>\n </ReactAriaCell>\n )}\n <Collection items={columns}>{children}</Collection>\n </>\n );\n\n return (\n <ReactAriaRow\n href={href}\n {...restProps}\n {...dataAttributes}\n target={effectiveTarget}\n rel={effectiveRel}\n className={clsx(classes.root, restProps.className)}\n data-react-aria-pressable={hasInternalHref ? 'true' : undefined}\n onAction={handlePress}\n >\n {content}\n </ReactAriaRow>\n );\n}\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-Select\":\"fl_o2cRttX8vIo5j\",\"bui-SelectPopover\":\"xRoZ59Ta50wTyFbP\",\"bui-SelectTrigger\":\"f6xSegNfnDAA591f\",\"bui-SelectTriggerChevron\":\"hey3g7_Ll4EtTJdE\",\"bui-SelectValue\":\"EOuke6Cxn9cos7ok\",\"bui-SelectItemIndicator\":\"LiF4f9w5zcb_V5q_\",\"bui-SelectList\":\"wCPzC0hbf30wVMOp\",\"bui-SelectItem\":\"Mn7kwp0_L8g4rWcf\",\"bui-SelectItemLabel\":\"sG8NrKzlnq4NyoHP\",\"bui-SelectSearchWrapper\":\"af0jN5t2MnkzSKwM\",\"bui-SelectSearch\":\"MAcGzHfmHVw4bkcS\",\"bui-SelectSearchClear\":\"Qm0LMYJXqDozSs4J\",\"bui-SelectNoResults\":\"mai_FHtvkacjqFtg\"};","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type {\n SelectOwnProps,\n SelectTriggerOwnProps,\n SelectContentOwnProps,\n SelectListBoxOwnProps,\n} from './types';\nimport styles from './Select.module.css';\n\n/**\n * Component definition for Select\n * @public\n */\nexport const SelectDefinition = defineComponent<SelectOwnProps>()({\n styles,\n classNames: {\n root: 'bui-Select',\n popover: 'bui-SelectPopover',\n },\n propDefs: {\n icon: {},\n size: { dataAttribute: true, default: 'small' },\n options: {},\n searchable: {},\n searchPlaceholder: {},\n label: {},\n secondaryLabel: {},\n description: {},\n isRequired: {},\n className: {},\n },\n});\n\n/**\n * Component definition for SelectTrigger\n * @internal\n */\nexport const SelectTriggerDefinition = defineComponent<SelectTriggerOwnProps>()(\n {\n styles,\n classNames: {\n root: 'bui-SelectTrigger',\n chevron: 'bui-SelectTriggerChevron',\n value: 'bui-SelectValue',\n },\n bg: 'consumer',\n propDefs: {\n icon: {},\n },\n },\n);\n\n/**\n * Component definition for SelectContent\n * @internal\n */\nexport const SelectContentDefinition = defineComponent<SelectContentOwnProps>()(\n {\n styles,\n classNames: {\n root: 'bui-SelectSearchWrapper',\n search: 'bui-SelectSearch',\n searchClear: 'bui-SelectSearchClear',\n },\n propDefs: {\n searchable: {},\n searchPlaceholder: { default: 'Search...' },\n options: {},\n },\n },\n);\n\n/**\n * Component definition for SelectListBox\n * @internal\n */\nexport const SelectListBoxDefinition = defineComponent<SelectListBoxOwnProps>()(\n {\n styles,\n classNames: {\n root: 'bui-SelectList',\n item: 'bui-SelectItem',\n itemIndicator: 'bui-SelectItemIndicator',\n itemLabel: 'bui-SelectItemLabel',\n noResults: 'bui-SelectNoResults',\n },\n propDefs: {\n options: {},\n },\n },\n);\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type { PopoverOwnProps } from './types';\nimport styles from './Popover.module.css';\n\n/**\n * Component definition for Popover\n * @public\n */\nexport const PopoverDefinition = defineComponent<PopoverOwnProps>()({\n styles,\n classNames: {\n root: 'bui-Popover',\n arrow: 'bui-PopoverArrow',\n content: 'bui-PopoverContent',\n },\n propDefs: {\n children: {},\n hideArrow: {},\n className: {},\n },\n});\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-Popover\":\"c6K43dAXzUIQYTPO\",\"bui-PopoverArrow\":\"nWNOVN9SSAkDCJc4\",\"bui-PopoverContent\":\"ndXnur8atSwrX9tW\"};","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type { FieldLabelOwnProps } from './types';\nimport styles from './FieldLabel.module.css';\n\n/**\n * Component definition for FieldLabel\n * @public\n */\nexport const FieldLabelDefinition = defineComponent<FieldLabelOwnProps>()({\n styles,\n classNames: {\n root: 'bui-FieldLabelWrapper',\n label: 'bui-FieldLabel',\n secondaryLabel: 'bui-FieldSecondaryLabel',\n description: 'bui-FieldDescription',\n },\n propDefs: {\n label: {},\n secondaryLabel: {},\n description: {},\n htmlFor: {},\n id: {},\n descriptionId: {},\n className: {},\n },\n});\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-FieldLabelWrapper\":\"QCxpyIls6to9Bn5w\",\"bui-FieldLabel\":\"qjnrgCeKosN0HGNG\",\"bui-FieldSecondaryLabel\":\"VAD8KU3Enrs4kH_k\",\"bui-FieldDescription\":\"KsFBKeDCTE86ZANx\"};","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Label } from 'react-aria-components';\nimport { forwardRef } from 'react';\nimport type { FieldLabelProps } from './types';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { FieldLabelDefinition } from './definition';\n\n/**\n * Renders a label for a form field with optional secondary label and description text.\n *\n * @public\n */\nexport const FieldLabel = forwardRef<HTMLDivElement, FieldLabelProps>(\n (props: FieldLabelProps, ref) => {\n const { ownProps, restProps } = useDefinition(FieldLabelDefinition, props);\n const {\n classes,\n label,\n secondaryLabel,\n description,\n htmlFor,\n id,\n descriptionId,\n } = ownProps;\n\n if (!label) return null;\n\n return (\n <div className={classes.root} {...restProps} ref={ref}>\n {label && (\n <Label className={classes.label} htmlFor={htmlFor} id={id}>\n {label}\n {secondaryLabel && (\n <span aria-hidden=\"true\" className={classes.secondaryLabel}>\n ({secondaryLabel})\n </span>\n )}\n </Label>\n )}\n {description && (\n <div className={classes.description} id={descriptionId}>\n {description}\n </div>\n )}\n </div>\n );\n },\n);\n\nFieldLabel.displayName = 'FieldLabel';\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type { FieldErrorOwnProps } from './types';\nimport styles from './FieldError.module.css';\n\n/**\n * Component definition for FieldError\n * @public\n */\nexport const FieldErrorDefinition = defineComponent<FieldErrorOwnProps>()({\n styles,\n classNames: {\n root: 'bui-FieldError',\n },\n propDefs: {\n className: {},\n },\n});\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-FieldError\":\"Ai9iNkHuNwQ8kqsz\"};","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { forwardRef } from 'react';\nimport { FieldError as AriaFieldError } from 'react-aria-components';\nimport type { FieldErrorProps } from './types';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { FieldErrorDefinition } from './definition';\n\n/**\n * Displays a validation error message associated with a form field.\n *\n * @public\n */\nexport const FieldError = forwardRef<HTMLDivElement, FieldErrorProps>(\n (props: FieldErrorProps, ref) => {\n const { ownProps, restProps } = useDefinition(FieldErrorDefinition, props);\n const { classes } = ownProps;\n\n return <AriaFieldError className={classes.root} ref={ref} {...restProps} />;\n },\n);\n\nFieldError.displayName = 'FieldError';\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ReactNode } from 'react';\nimport { Button, SelectValue } from 'react-aria-components';\nimport { RiArrowDownSLine } from '@remixicon/react';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { SelectTriggerDefinition } from './definition';\n\ninterface SelectTriggerProps {\n icon?: ReactNode;\n}\n\nexport function SelectTrigger(props: SelectTriggerProps) {\n const { ownProps, dataAttributes } = useDefinition(\n SelectTriggerDefinition,\n props,\n );\n const { classes, icon } = ownProps;\n\n return (\n <Button className={classes.root} {...dataAttributes}>\n {icon}\n <SelectValue className={classes.value} />\n <div className={classes.chevron}>\n <RiArrowDownSLine aria-hidden=\"true\" />\n </div>\n </Button>\n );\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ListBox, ListBoxItem, Text } from 'react-aria-components';\nimport { RiCheckLine } from '@remixicon/react';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { SelectListBoxDefinition } from './definition';\nimport type { Option } from './types';\n\ninterface SelectListBoxProps {\n options?: Array<Option>;\n}\n\nconst NoResults = () => {\n const { ownProps } = useDefinition(SelectListBoxDefinition, {});\n const { classes } = ownProps;\n\n return <div className={classes.noResults}>No results found.</div>;\n};\n\nexport function SelectListBox(props: SelectListBoxProps) {\n const { ownProps } = useDefinition(SelectListBoxDefinition, props);\n const { classes, options } = ownProps;\n\n return (\n <ListBox className={classes.root} renderEmptyState={() => <NoResults />}>\n {options?.map(option => (\n <ListBoxItem\n key={option.value}\n id={option.value}\n textValue={option.label}\n className={classes.item}\n isDisabled={option.disabled}\n >\n <div className={classes.itemIndicator}>\n <RiCheckLine />\n </div>\n <Text slot=\"label\" className={classes.itemLabel}>\n {option.label}\n </Text>\n </ListBoxItem>\n ))}\n </ListBox>\n );\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Input,\n SearchField,\n Autocomplete,\n Button,\n} from 'react-aria-components';\nimport { useFilter } from 'react-aria';\nimport { RiCloseCircleLine } from '@remixicon/react';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { SelectContentDefinition } from './definition';\nimport { SelectListBox } from './SelectListBox';\nimport type { Option } from './types';\n\ninterface SelectContentProps {\n searchable?: boolean;\n searchPlaceholder?: string;\n options?: Array<Option>;\n}\n\nexport function SelectContent(props: SelectContentProps) {\n const { contains } = useFilter({ sensitivity: 'base' });\n const { ownProps } = useDefinition(SelectContentDefinition, props);\n const { classes, searchable, searchPlaceholder, options } = ownProps;\n\n if (!searchable) {\n return <SelectListBox options={options} />;\n }\n\n return (\n <Autocomplete filter={contains}>\n <SearchField\n autoFocus\n className={classes.root}\n aria-label={searchPlaceholder}\n >\n <Input placeholder={searchPlaceholder} className={classes.search} />\n <Button className={classes.searchClear}>\n <RiCloseCircleLine />\n </Button>\n </SearchField>\n <SelectListBox options={options} />\n </Autocomplete>\n );\n}\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { forwardRef, useEffect } from 'react';\nimport { Select as AriaSelect, Popover } from 'react-aria-components';\nimport { SelectProps } from './types';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { SelectDefinition } from './definition';\nimport { PopoverDefinition } from '../Popover/definition';\nimport clsx from 'clsx';\nimport { FieldLabel } from '../FieldLabel';\nimport { FieldError } from '../FieldError';\nimport { SelectTrigger } from './SelectTrigger';\nimport { SelectContent } from './SelectContent';\n\n/**\n * A dropdown picker for selecting one or multiple options from a list, with optional search filtering and inline error display.\n *\n * @public\n */\nexport const Select = forwardRef<\n HTMLDivElement,\n SelectProps<'single' | 'multiple'>\n>((props, ref) => {\n const { ownProps, restProps, dataAttributes } = useDefinition(\n SelectDefinition,\n {\n placeholder: 'Select an option',\n ...props,\n },\n );\n const { ownProps: popoverOwnProps } = useDefinition(PopoverDefinition, {});\n\n const {\n classes,\n label,\n description,\n options,\n icon,\n searchable,\n searchPlaceholder,\n isRequired,\n secondaryLabel,\n } = ownProps;\n\n const ariaLabel = restProps['aria-label'];\n const ariaLabelledBy = restProps['aria-labelledby'];\n\n useEffect(() => {\n if (!label && !ariaLabel && !ariaLabelledBy) {\n console.warn(\n 'Select requires either a visible label, aria-label, or aria-labelledby for accessibility',\n );\n }\n }, [label, ariaLabel, ariaLabelledBy]);\n\n const secondaryLabelText = secondaryLabel || (isRequired ? 'Required' : null);\n\n return (\n <AriaSelect\n className={classes.root}\n {...dataAttributes}\n ref={ref}\n {...restProps}\n >\n <FieldLabel\n label={label}\n secondaryLabel={secondaryLabelText}\n description={description}\n />\n <SelectTrigger icon={icon} />\n <FieldError />\n <Popover\n className={clsx(popoverOwnProps.classes.root, classes.popover)}\n {...dataAttributes}\n >\n <SelectContent\n searchable={searchable}\n searchPlaceholder={searchPlaceholder}\n options={options}\n />\n </Popover>\n </AriaSelect>\n );\n});\n\nSelect.displayName = 'Select';\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type { TablePaginationOwnProps, PageSizeOption } from './types';\nimport styles from './TablePagination.module.css';\n\nconst DEFAULT_PAGE_SIZE_OPTIONS: PageSizeOption[] = [\n { label: 'Show 5 results', value: 5 },\n { label: 'Show 10 results', value: 10 },\n { label: 'Show 20 results', value: 20 },\n { label: 'Show 30 results', value: 30 },\n { label: 'Show 40 results', value: 40 },\n { label: 'Show 50 results', value: 50 },\n];\n\n/**\n * Component definition for TablePagination\n * @public\n */\nexport const TablePaginationDefinition =\n defineComponent<TablePaginationOwnProps>()({\n styles,\n classNames: {\n root: 'bui-TablePagination',\n left: 'bui-TablePaginationLeft',\n right: 'bui-TablePaginationRight',\n select: 'bui-TablePaginationSelect',\n },\n propDefs: {\n pageSize: {},\n pageSizeOptions: { default: DEFAULT_PAGE_SIZE_OPTIONS },\n offset: {},\n totalCount: {},\n hasNextPage: {},\n hasPreviousPage: {},\n onNextPage: {},\n onPreviousPage: {},\n onPageSizeChange: {},\n showPageSizeOptions: { default: true },\n getLabel: {},\n showPaginationLabel: { default: true },\n },\n });\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-TablePagination\":\"Z_Iagacz0F1YYG04\",\"bui-TablePaginationLeft\":\"N_pRbW6lVsY4Hdgf\",\"bui-TablePaginationRight\":\"qXYnm03BkEcKl1FA\",\"bui-TablePaginationSelect\":\"plzZlLJyZhc3wn3s\"};","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useId } from 'react-aria';\nimport { Text } from '../Text';\nimport { ButtonIcon } from '../ButtonIcon';\nimport { Select } from '../Select';\nimport type { TablePaginationProps, PageSizeOption } from './types';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { TablePaginationDefinition } from './definition';\nimport { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react';\nimport { useMemo } from 'react';\n\nfunction getOptionValue(option: number | PageSizeOption): number {\n return typeof option === 'number' ? option : option.value;\n}\n\nfunction isNumberArray(\n options: number[] | PageSizeOption[],\n): options is number[] {\n return options.length > 0 && typeof options[0] === 'number';\n}\n\nfunction normalizePageSizeOptions(\n options: number[] | PageSizeOption[],\n): PageSizeOption[] {\n if (isNumberArray(options)) {\n return options.map(value => ({\n label: `Show ${value} results`,\n value,\n }));\n }\n return options;\n}\n\n/**\n * Pagination controls for Table components with page navigation and size selection.\n *\n * @public\n */\nexport function TablePagination(props: TablePaginationProps) {\n const { ownProps } = useDefinition(TablePaginationDefinition, props);\n const {\n classes,\n pageSize,\n pageSizeOptions,\n offset,\n totalCount,\n hasNextPage,\n hasPreviousPage,\n onNextPage,\n onPreviousPage,\n onPageSizeChange,\n showPageSizeOptions,\n getLabel,\n showPaginationLabel,\n } = ownProps;\n\n const labelId = useId();\n const normalizedOptions = useMemo(\n () => normalizePageSizeOptions(pageSizeOptions),\n [pageSizeOptions],\n );\n\n const effectivePageSize = useMemo(() => {\n const isValid = pageSizeOptions.some(\n opt => getOptionValue(opt) === pageSize,\n );\n if (isValid) {\n return pageSize;\n }\n const firstValue = getOptionValue(pageSizeOptions[0]);\n console.warn(\n `TablePagination: pageSize ${pageSize} is not in pageSizeOptions, using ${firstValue} instead`,\n );\n return firstValue;\n }, [pageSize, pageSizeOptions]);\n\n const hasItems = totalCount !== undefined && totalCount !== 0;\n\n const showLabel = hasItems && showPaginationLabel !== false;\n\n let label = `${totalCount} items`;\n if (getLabel) {\n label = getLabel({ pageSize: effectivePageSize, offset, totalCount });\n } else if (offset !== undefined) {\n const fromCount = offset + 1;\n const toCount = Math.min(offset + effectivePageSize, totalCount ?? 0);\n label = `${fromCount} - ${toCount} of ${totalCount}`;\n }\n\n return (\n <div className={classes.root}>\n <div className={classes.left}>\n {showPageSizeOptions && (\n <Select\n name=\"pageSize\"\n size=\"small\"\n aria-label=\"Select table page size\"\n options={normalizedOptions.map(opt => ({\n label: opt.label,\n value: String(opt.value),\n }))}\n defaultValue={effectivePageSize.toString()}\n onChange={value => {\n const newPageSize = Number(value);\n onPageSizeChange?.(newPageSize);\n }}\n className={classes.select}\n />\n )}\n </div>\n <div className={classes.right}>\n {showLabel && (\n <Text as=\"p\" variant=\"body-medium\" id={labelId}>\n {label}\n </Text>\n )}\n <ButtonIcon\n variant=\"secondary\"\n size=\"small\"\n onClick={onPreviousPage}\n isDisabled={!hasPreviousPage}\n icon={<RiArrowLeftSLine />}\n aria-label=\"Previous table page\"\n aria-describedby={showLabel ? labelId : undefined}\n />\n <ButtonIcon\n variant=\"secondary\"\n size=\"small\"\n onClick={onNextPage}\n isDisabled={!hasNextPage}\n icon={<RiArrowRightSLine />}\n aria-label=\"Next table page\"\n aria-describedby={showLabel ? labelId : undefined}\n />\n </div>\n </div>\n );\n}\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type { SkeletonOwnProps } from './types';\nimport styles from './Skeleton.module.css';\n\n/**\n * Component definition for Skeleton\n * @public\n */\nexport const SkeletonDefinition = defineComponent<SkeletonOwnProps>()({\n styles,\n classNames: {\n root: 'bui-Skeleton',\n },\n propDefs: {\n width: { default: 80 },\n height: { default: 24 },\n rounded: { dataAttribute: true, default: false },\n className: {},\n style: {},\n },\n});\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-Skeleton\":\"dQdXlDCvsLk1w8Z3\"};","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { SkeletonProps } from './types';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { SkeletonDefinition } from './definition';\n\n/**\n * A placeholder shape displayed while content is loading, matching the size and layout of the content it replaces.\n *\n * @public\n */\nexport const Skeleton = (props: SkeletonProps) => {\n const { ownProps, restProps, dataAttributes } = useDefinition(\n SkeletonDefinition,\n props,\n );\n const { classes, width, height, style } = ownProps;\n\n return (\n <div\n className={classes.root}\n {...dataAttributes}\n style={{\n width,\n height,\n ...style,\n }}\n {...restProps}\n />\n );\n};\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TableBody } from './TableBody';\nimport { Row } from './Row';\nimport { Cell } from './Cell';\nimport { Skeleton } from '../../Skeleton';\nimport type { ColumnConfig, TableItem } from '../types';\n\nconst SKELETON_ROW_COUNT = 5;\nconst SKELETON_WIDTHS = ['75%', '50%', '60%', '45%', '70%'];\n\nconst skeletonItems = Array.from({ length: SKELETON_ROW_COUNT }, (_, i) => ({\n id: `skeleton-${i}`,\n}));\n\n/** @internal */\nexport function TableBodySkeleton<T extends TableItem>({\n columns,\n}: {\n columns: readonly ColumnConfig<T>[];\n}) {\n return (\n <TableBody items={skeletonItems} dependencies={[columns]}>\n {item => {\n const rowIndex = Number(item.id.split('-')[1]);\n return (\n <Row id={item.id} columns={columns}>\n {column => (\n <Cell key={column.id} aria-hidden=\"true\">\n <Skeleton\n width={\n SKELETON_WIDTHS[\n (rowIndex + columns.indexOf(column)) %\n SKELETON_WIDTHS.length\n ]\n }\n />\n </Cell>\n )}\n </Row>\n );\n }}\n </TableBody>\n );\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useId } from 'react-aria';\nimport {\n type Key,\n ResizableTableContainer,\n Virtualizer,\n} from 'react-aria-components';\nimport { TableLayout } from '@react-stately/layout';\nimport { useDefinition } from '../../../hooks/useDefinition';\nimport { TableWrapperDefinition } from '../definition';\nimport { TableRoot } from './TableRoot';\nimport { TableHeader } from './TableHeader';\nimport { TableBody } from './TableBody';\nimport { Row } from './Row';\nimport { Column } from './Column';\nimport { TablePagination } from '../../TablePagination';\nimport type {\n TableProps,\n TableItem,\n RowConfig,\n RowRenderFn,\n TablePaginationType,\n} from '../types';\nimport { useMemo } from 'react';\nimport { VisuallyHidden } from '../../VisuallyHidden';\nimport { Flex } from '../../Flex';\nimport { TableBodySkeleton } from './TableBodySkeleton';\n\nfunction isRowRenderFn<T extends TableItem>(\n rowConfig: RowConfig<T> | RowRenderFn<T> | undefined,\n): rowConfig is RowRenderFn<T> {\n return typeof rowConfig === 'function';\n}\n\nfunction useDisabledRows<T extends TableItem>({\n data,\n rowConfig,\n}: Pick<TableProps<T>, 'data' | 'rowConfig'>): Set<Key> | undefined {\n return useMemo(() => {\n if (!data || typeof rowConfig === 'function' || !rowConfig?.getIsDisabled) {\n return;\n }\n\n return data.reduce<Set<Key>>((set, item) => {\n const isDisabled = rowConfig.getIsDisabled?.(item);\n if (isDisabled) {\n set.add(String(item.id));\n }\n return set;\n }, new Set<Key>());\n }, [data, rowConfig]);\n}\n\nfunction useLiveRegionLabel(\n pagination: TablePaginationType,\n isStale: boolean,\n isLoading: boolean,\n hasData: boolean,\n): string {\n if (isLoading) {\n return 'Loading table data.';\n }\n\n if (!hasData || pagination.type === 'none') {\n return '';\n }\n\n const { pageSize, offset, totalCount, getLabel } = pagination;\n\n if (isStale) {\n return 'Loading table data.';\n }\n\n let liveRegionLabel = 'Table page loaded. ';\n\n if (getLabel) {\n liveRegionLabel += getLabel({ pageSize, offset, totalCount });\n } else if (offset !== undefined) {\n const fromCount = offset + 1;\n const toCount = Math.min(offset + pageSize, totalCount ?? 0);\n liveRegionLabel += `Showing ${fromCount} to ${toCount} of ${totalCount}`;\n }\n return liveRegionLabel;\n}\n\n/**\n * A full-featured data table with built-in pagination, sorting, row selection, loading and error states, and optional virtualization.\n * Pair with `useTable` to manage data fetching and state, or pass `data`, `columnConfig`, and `pagination` directly for manual control.\n *\n * @public\n */\nexport function Table<T extends TableItem>({\n columnConfig,\n data,\n loading = false,\n isStale = false,\n error,\n pagination,\n sort,\n rowConfig,\n selection,\n emptyState,\n className,\n style,\n virtualized,\n}: TableProps<T>) {\n const {\n ownProps: { classes },\n } = useDefinition(TableWrapperDefinition, { className });\n const liveRegionId = useId();\n\n const visibleColumns = useMemo(\n () => columnConfig.filter(col => !col.isHidden),\n [columnConfig],\n );\n const disabledRows = useDisabledRows({ data, rowConfig });\n\n const {\n mode: selectionMode,\n selected: selectedKeys,\n behavior: selectionBehavior,\n onSelectionChange,\n } = selection || {};\n\n const isInitialLoading = loading && !data;\n\n if (error) {\n return (\n <div className={classes.root} style={style}>\n Error: {error.message}\n </div>\n );\n }\n\n const liveRegionLabel = useLiveRegionLabel(\n pagination,\n isStale,\n isInitialLoading,\n data !== undefined,\n );\n\n const manualColumnSizing = columnConfig.some(\n col =>\n col.width != null ||\n col.minWidth != null ||\n col.maxWidth != null ||\n col.defaultWidth != null,\n );\n\n const wrapResizable = manualColumnSizing\n ? (elem: React.ReactNode) => (\n <ResizableTableContainer className={classes.resizableContainer}>\n {elem}\n </ResizableTableContainer>\n )\n : (elem: React.ReactNode) => <>{elem}</>;\n\n const layoutOptions =\n typeof virtualized === 'object' ? virtualized : undefined;\n\n const wrapVirtualized = (elem: React.ReactNode) =>\n virtualized ? (\n <Virtualizer layout={TableLayout} layoutOptions={layoutOptions}>\n {elem}\n </Virtualizer>\n ) : (\n elem\n );\n\n return (\n <div className={classes.root} style={style}>\n <VisuallyHidden aria-live=\"polite\" id={liveRegionId}>\n {liveRegionLabel}\n </VisuallyHidden>\n {wrapResizable(\n wrapVirtualized(\n <TableRoot\n {...(isInitialLoading\n ? {}\n : {\n selectionMode,\n selectionBehavior,\n selectedKeys,\n onSelectionChange,\n })}\n sortDescriptor={sort?.descriptor ?? undefined}\n onSortChange={sort?.onSortChange}\n disabledKeys={disabledRows}\n stale={isStale}\n loading={isInitialLoading}\n aria-describedby={liveRegionId}\n >\n <TableHeader columns={visibleColumns}>\n {column =>\n column.header ? (\n column.header()\n ) : (\n <Column\n id={column.id}\n isRowHeader={column.isRowHeader}\n allowsSorting={column.isSortable}\n width={column.width}\n defaultWidth={column.defaultWidth}\n minWidth={column.minWidth}\n maxWidth={column.maxWidth}\n >\n {column.label}\n </Column>\n )\n }\n </TableHeader>\n {isInitialLoading ? (\n <TableBodySkeleton columns={visibleColumns} />\n ) : (\n <TableBody\n items={data}\n dependencies={[visibleColumns]}\n renderEmptyState={\n emptyState ? () => <Flex p=\"3\">{emptyState}</Flex> : undefined\n }\n >\n {item => {\n const itemIndex = data?.indexOf(item) ?? -1;\n\n if (isRowRenderFn(rowConfig)) {\n return rowConfig({\n item,\n index: itemIndex,\n });\n }\n\n return (\n <Row\n id={String(item.id)}\n columns={visibleColumns}\n href={rowConfig?.getHref?.(item)}\n onAction={\n rowConfig?.onClick\n ? () => rowConfig?.onClick?.(item)\n : undefined\n }\n >\n {column => column.cell(item)}\n </Row>\n );\n }}\n </TableBody>\n )}\n </TableRoot>,\n ),\n )}\n {pagination.type === 'page' && (\n <TablePagination\n pageSize={pagination.pageSize}\n pageSizeOptions={pagination.pageSizeOptions}\n offset={pagination.offset}\n totalCount={pagination.totalCount}\n hasNextPage={pagination.hasNextPage}\n hasPreviousPage={pagination.hasPreviousPage}\n onNextPage={pagination.onNextPage}\n onPreviousPage={pagination.onPreviousPage}\n onPageSizeChange={pagination.onPageSizeChange}\n showPageSizeOptions={pagination.showPageSizeOptions}\n getLabel={pagination.getLabel}\n showPaginationLabel={pagination.showPaginationLabel}\n />\n )}\n </div>\n );\n}\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-TableWrapper\":\"v8W8N2dqiE5cGNxm\",\"bui-TableResizableContainer\":\"Q3dVWKchqFEGDxNm\",\"bui-Table\":\"kHZPXvGYPYAGYFhf\",\"bui-TableHeader\":\"oifZQr6gC_QyhRzd\",\"bui-TableHead\":\"X8xcDL8E6rIYbeSR\",\"bui-TableHeadSelection\":\"ae9pE72Zc07f8L6W\",\"bui-TableHeadContent\":\"d_1Lwe7cMab7Y7x8\",\"bui-TableHeadLabel\":\"c2mE5YTadTwCB9Cv\",\"bui-TableHeadSortButton\":\"U0p16BfATSMI0pZa\",\"bui-TableBody\":\"RevIL7d7UeIjyBcV\",\"bui-TableRow\":\"kPJhRwYa5RAAhwxF\",\"bui-TableCell\":\"lBJ1evBwz18CSuEb\",\"bui-TableCellSelection\":\"waN8m81er3MmoNwQ\",\"bui-TableCellContentWrapper\":\"AQrmv2_3dWQm8mkC\",\"bui-TableCellIcon\":\"pZfxgqebmIQNGPFo\",\"bui-TableCellContent\":\"VL_PIHABTKklOpWr\",\"bui-TableCellProfile\":\"qco3EFeJwhQRop02\"};","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type {\n TableRootOwnProps,\n TableHeaderOwnProps,\n TableBodyOwnProps,\n RowOwnProps,\n ColumnOwnProps,\n CellOwnProps,\n CellTextOwnProps,\n CellProfileOwnProps,\n} from './types';\nimport styles from './Table.module.css';\n\n/** @internal */\nexport const TableWrapperDefinition = defineComponent<{\n className?: string;\n}>()({\n styles,\n classNames: {\n root: 'bui-TableWrapper',\n resizableContainer: 'bui-TableResizableContainer',\n },\n propDefs: {\n className: {},\n },\n});\n\n/**\n * Component definition for Table\n * @public\n */\nexport const TableDefinition = defineComponent<TableRootOwnProps>()({\n styles,\n classNames: {\n root: 'bui-Table',\n },\n propDefs: {\n stale: { dataAttribute: true },\n loading: { dataAttribute: true },\n },\n});\n\n/**\n * Component definition for TableHeader\n * @internal\n */\nexport const TableHeaderDefinition = defineComponent<TableHeaderOwnProps>()({\n styles,\n classNames: {\n root: 'bui-TableHeader',\n headSelection: 'bui-TableHeadSelection',\n },\n propDefs: {\n columns: {},\n children: {},\n },\n});\n\n/**\n * Component definition for TableBody\n * @internal\n */\nexport const TableBodyDefinition = defineComponent<TableBodyOwnProps>()({\n styles,\n classNames: {\n root: 'bui-TableBody',\n },\n propDefs: {},\n});\n\n/**\n * Component definition for Row\n * @internal\n */\nexport const RowDefinition = defineComponent<RowOwnProps>()({\n styles,\n resolveHref: true,\n analytics: true,\n bg: 'consumer',\n classNames: {\n root: 'bui-TableRow',\n cell: 'bui-TableCell',\n cellSelection: 'bui-TableCellSelection',\n },\n propDefs: {\n columns: {},\n children: {},\n href: {},\n noTrack: {},\n },\n});\n\n/**\n * Component definition for Column\n * @internal\n */\nexport const ColumnDefinition = defineComponent<ColumnOwnProps>()({\n styles,\n classNames: {\n root: 'bui-TableHead',\n headContent: 'bui-TableHeadContent',\n headLabel: 'bui-TableHeadLabel',\n headSortButton: 'bui-TableHeadSortButton',\n },\n propDefs: {\n children: {},\n className: {},\n },\n});\n\n/**\n * Component definition for Cell\n * @internal\n */\nexport const CellDefinition = defineComponent<CellOwnProps>()({\n styles,\n classNames: {\n root: 'bui-TableCell',\n },\n propDefs: {\n className: {},\n },\n});\n\n/**\n * Component definition for CellText\n * @internal\n */\nexport const CellTextDefinition = defineComponent<CellTextOwnProps>()({\n styles,\n resolveHref: true,\n classNames: {\n root: 'bui-TableCell',\n cellContentWrapper: 'bui-TableCellContentWrapper',\n cellContent: 'bui-TableCellContent',\n cellIcon: 'bui-TableCellIcon',\n },\n propDefs: {\n title: {},\n description: {},\n color: { default: 'primary' },\n leadingIcon: {},\n href: {},\n className: {},\n },\n});\n\n/**\n * Component definition for CellProfile\n * @internal\n */\nexport const CellProfileDefinition = defineComponent<CellProfileOwnProps>()({\n styles,\n resolveHref: true,\n classNames: {\n root: 'bui-TableCell',\n cellContentWrapper: 'bui-TableCellContentWrapper',\n cellContent: 'bui-TableCellContent',\n },\n propDefs: {\n src: {},\n name: {},\n href: {},\n description: {},\n color: { default: 'primary' },\n className: {},\n },\n});\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useMemo, useState, useCallback } from 'react';\nimport type { QueryOptions, QueryState } from './types';\n\nfunction useControlledStateHelper<T, TControlled = T, TInitial = TControlled>(\n initialValue: TInitial,\n controlledValue: TControlled | undefined,\n onChange: ((value: T) => void) | undefined,\n) {\n const [internalValue, setInternalValue] = useState<TInitial>(initialValue);\n\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n const setValue = useCallback(\n (newValue: T) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue as unknown as TInitial);\n }\n if (onChange) {\n onChange(newValue);\n }\n },\n [controlledValue, onChange],\n );\n\n return [value, setValue] as const;\n}\n\n/** @internal */\nexport function useQueryState<TFilter>(\n options: QueryOptions<TFilter>,\n): QueryState<TFilter> {\n const [sort, setSort] = useControlledStateHelper(\n options.initialSort ?? null,\n options.sort,\n options.onSortChange,\n );\n const [filter, setFilter] = useControlledStateHelper(\n options.initialFilter,\n options.filter,\n options.onFilterChange,\n );\n const [search, setSearch] = useControlledStateHelper(\n options.initialSearch ?? '',\n options.search,\n options.onSearchChange,\n );\n\n return useMemo(\n () => ({ sort, setSort, filter, setFilter, search, setSearch }),\n [sort, setSort, filter, setFilter, search, setSearch],\n );\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useRef, useCallback } from 'react';\n\n/**\n * Returns a stable callback reference that always calls the latest version\n * of the provided function. Useful for callbacks passed as props that may\n * change on every render but shouldn't trigger effect re-runs.\n *\n * @internal\n */\nexport function useStableCallback<T extends (...args: any[]) => any>(fn: T): T {\n const ref = useRef(fn);\n ref.current = fn;\n\n return useCallback((...args: Parameters<T>) => ref.current(...args), []) as T;\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { PageSizeOption } from '../../TablePagination/types';\nimport type { PaginationOptions } from './types';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\nfunction getOptionValue(option: number | PageSizeOption): number {\n return typeof option === 'number' ? option : option.value;\n}\n\n/** @internal */\nexport function getEffectivePageSize(\n paginationOptions: PaginationOptions,\n): number {\n const { pageSize, pageSizeOptions } = paginationOptions;\n\n if (!pageSizeOptions) {\n return pageSize ?? DEFAULT_PAGE_SIZE;\n }\n\n const firstValue = getOptionValue(pageSizeOptions[0]);\n\n if (pageSize === undefined) {\n return firstValue;\n }\n\n const isValid = pageSizeOptions.some(opt => getOptionValue(opt) === pageSize);\n\n if (isValid) {\n return pageSize;\n }\n\n console.warn(\n `useTable: pageSize ${pageSize} is not in pageSizeOptions, using ${firstValue} instead`,\n );\n return firstValue;\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\n\nconst FIRST_PAGE_CURSOR = Symbol('firstPage');\n\ntype CursorType = string | number;\n\ntype InternalCursor<TCursor extends CursorType> =\n | TCursor\n | typeof FIRST_PAGE_CURSOR;\n\ninterface PageEntry<T, TCursor extends CursorType> {\n data: T[] | undefined;\n nextCursor: InternalCursor<TCursor> | undefined;\n prevCursor: InternalCursor<TCursor> | undefined;\n}\n\ninterface GetDataResult<T, TCursor extends CursorType> {\n data: T[];\n nextCursor?: TCursor;\n prevCursor?: TCursor;\n totalCount?: number;\n}\n\n/** @internal */\nexport interface UsePageCacheOptions<T, TCursor extends CursorType = string> {\n getData: (params: {\n cursor: TCursor | undefined;\n signal: AbortSignal;\n }) => Promise<GetDataResult<T, TCursor>>;\n initialCurrentCursor?: TCursor;\n}\n\n/** @internal */\nexport interface UsePageCacheResult<T, TCursor extends CursorType = string> {\n loading: boolean;\n error: Error | undefined;\n data: T[] | undefined;\n totalCount: number | undefined;\n currentCursor: TCursor | undefined;\n hasPreviousPage: boolean;\n onPreviousPage: () => void;\n hasNextPage: boolean;\n onNextPage: () => void;\n reload: (options?: { keepCurrentCursor?: boolean }) => void;\n}\n\ntype Direction = 'mount' | 'reset' | 'refresh' | 'next' | 'prev';\n\nclass PageCacheStore<T, TCursor extends CursorType> {\n private cache = new Map<InternalCursor<TCursor>, PageEntry<T, TCursor>>();\n\n get(cursor: InternalCursor<TCursor>): PageEntry<T, TCursor> | undefined {\n return this.cache.get(cursor);\n }\n\n getOrCreate(cursor: InternalCursor<TCursor>): PageEntry<T, TCursor> {\n const existing = this.cache.get(cursor);\n if (existing) {\n return existing;\n }\n const entry: PageEntry<T, TCursor> = {\n data: undefined,\n nextCursor: undefined,\n prevCursor: undefined,\n };\n this.cache.set(cursor, entry);\n return entry;\n }\n\n clear() {\n this.cache.clear();\n }\n\n getTargetCursor(\n direction: Direction,\n currentCursor: InternalCursor<TCursor>,\n initialCurrentCursor: TCursor | undefined,\n ): InternalCursor<TCursor> | undefined {\n if (direction === 'mount') {\n return toInternalCursor(initialCurrentCursor);\n }\n if (direction === 'reset') {\n return FIRST_PAGE_CURSOR;\n }\n if (direction === 'refresh') {\n return currentCursor;\n }\n const currentEntry = this.cache.get(currentCursor);\n\n if (!currentEntry) {\n return;\n }\n\n return direction === 'next'\n ? currentEntry.nextCursor\n : currentEntry.prevCursor;\n }\n\n linkEntryToSource(\n entry: PageEntry<T, TCursor>,\n direction: Direction,\n currentCursor: InternalCursor<TCursor>,\n ) {\n if (direction === 'next') {\n entry.prevCursor = currentCursor;\n } else if (direction === 'prev') {\n entry.nextCursor = currentCursor;\n }\n }\n}\n\nfunction toInternalCursor<TCursor extends CursorType>(\n cursor: TCursor | undefined,\n): InternalCursor<TCursor> {\n return cursor === undefined ? FIRST_PAGE_CURSOR : cursor;\n}\n\nfunction toExternalCursor<TCursor extends CursorType>(\n cursor: InternalCursor<TCursor>,\n): TCursor | undefined {\n return cursor === FIRST_PAGE_CURSOR ? undefined : cursor;\n}\n\n/** @internal */\nexport function usePageCache<T, TCursor extends CursorType = string>(\n options: UsePageCacheOptions<T, TCursor>,\n): UsePageCacheResult<T, TCursor> {\n const { getData, initialCurrentCursor } = options;\n\n const [currentCursor, setCurrentCursor] = useState<InternalCursor<TCursor>>(\n () => toInternalCursor(initialCurrentCursor),\n );\n\n const cacheStore = useRef(new PageCacheStore<T, TCursor>()).current;\n\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | undefined>(undefined);\n const [totalCount, setTotalCount] = useState<number | undefined>(undefined);\n\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const currentPage = cacheStore.get(currentCursor);\n const data = currentPage?.data;\n const hasNextPage = currentPage?.nextCursor !== undefined;\n const hasPreviousPage = currentPage?.prevCursor !== undefined;\n\n const goToPage = useCallback(\n async (direction: Direction) => {\n const targetCursor = cacheStore.getTargetCursor(\n direction,\n currentCursor,\n initialCurrentCursor,\n );\n\n if (!targetCursor) {\n return;\n }\n\n const existingEntry = cacheStore.get(targetCursor);\n if (existingEntry?.data !== undefined) {\n setCurrentCursor(targetCursor);\n return;\n }\n\n const entry = cacheStore.getOrCreate(targetCursor);\n cacheStore.linkEntryToSource(entry, direction, currentCursor);\n setCurrentCursor(targetCursor);\n\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n const abortController = new AbortController();\n abortControllerRef.current = abortController;\n\n setLoading(true);\n setError(undefined);\n\n try {\n const result = await getData({\n cursor: toExternalCursor(targetCursor),\n signal: abortController.signal,\n });\n\n if (abortController.signal.aborted) {\n return;\n }\n\n entry.data = result.data;\n\n if (entry.nextCursor === undefined && result.nextCursor !== undefined) {\n entry.nextCursor = result.nextCursor;\n }\n if (entry.prevCursor === undefined && result.prevCursor !== undefined) {\n entry.prevCursor = result.prevCursor;\n }\n\n if (result.totalCount !== undefined) {\n setTotalCount(result.totalCount);\n }\n\n setLoading(false);\n } catch (err) {\n if (abortController.signal.aborted) {\n return;\n }\n\n setError(err instanceof Error ? err : new Error(String(err)));\n setLoading(false);\n }\n },\n [getData, initialCurrentCursor, currentCursor, cacheStore],\n );\n\n useEffect(() => {\n goToPage('mount');\n\n return () => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n };\n }, []);\n\n const onNextPage = useCallback(() => {\n if (loading) return;\n const page = cacheStore.get(currentCursor);\n if (!page?.nextCursor) return;\n goToPage('next');\n }, [loading, currentCursor, goToPage, cacheStore]);\n\n const onPreviousPage = useCallback(() => {\n if (loading) return;\n const page = cacheStore.get(currentCursor);\n if (!page?.prevCursor) return;\n goToPage('prev');\n }, [loading, currentCursor, goToPage, cacheStore]);\n\n const reload = useCallback(\n (reloadOptions?: { keepCurrentCursor?: boolean }) => {\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n cacheStore.clear();\n\n goToPage(reloadOptions?.keepCurrentCursor ? 'refresh' : 'reset');\n },\n [goToPage, cacheStore],\n );\n\n return {\n loading,\n error,\n data,\n totalCount,\n currentCursor: toExternalCursor(currentCursor),\n hasPreviousPage,\n onPreviousPage,\n hasNextPage,\n onNextPage,\n reload,\n };\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useRef } from 'react';\nimport type { QueryState } from './types';\n\n/**\n * Triggers a debounced reload when query or pageSize changes.\n * Debouncing reduces backend load during rapid changes (e.g., typing in search).\n */\n/** @internal */\nexport function useDebouncedReload<TFilter>(\n query: QueryState<TFilter>,\n pageSize: number,\n reload: () => void,\n delay: number = 200,\n): void {\n const prevDepsRef = useRef({ query, pageSize });\n\n useEffect(() => {\n const prev = prevDepsRef.current;\n if (prev.query !== query || prev.pageSize !== pageSize) {\n prevDepsRef.current = { query, pageSize };\n const timer = setTimeout(reload, delay);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [query, pageSize, reload, delay]);\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useMemo, useRef } from 'react';\nimport type { SortState, TableItem, TableProps } from '../types';\nimport type {\n PaginationResult,\n UseTableCompleteOptions,\n UseTableCursorOptions,\n UseTableOffsetOptions,\n UseTableOptions,\n UseTableResult,\n} from './types';\nimport { useQueryState } from './useQueryState';\nimport { useCompletePagination } from './useCompletePagination';\nimport { useCursorPagination } from './useCursorPagination';\nimport { useOffsetPagination } from './useOffsetPagination';\n\nfunction useTableProps<T extends TableItem>(\n paginationResult: PaginationResult<T>,\n sortState: SortState,\n paginationOptions: UseTableCompleteOptions<T>['paginationOptions'] = {},\n): Omit<\n TableProps<T>,\n 'columnConfig' | 'rowConfig' | 'selection' | 'emptyState'\n> {\n const {\n showPageSizeOptions = true,\n pageSizeOptions,\n onPageSizeChange: onPageSizeChangeCallback,\n onNextPage: onNextPageCallback,\n onPreviousPage: onPreviousPageCallback,\n getLabel,\n showPaginationLabel,\n } = paginationOptions;\n\n const previousDataRef = useRef(paginationResult.data);\n if (paginationResult.data) {\n previousDataRef.current = paginationResult.data;\n }\n\n const displayData = paginationResult.data ?? previousDataRef.current;\n const isStale = paginationResult.loading && displayData !== undefined;\n\n const pagination = useMemo(() => {\n if (paginationOptions.type === 'none') {\n return { type: 'none' as const };\n }\n return {\n type: 'page' as const,\n pageSize: paginationResult.pageSize,\n pageSizeOptions,\n offset: paginationResult.offset,\n totalCount: paginationResult.totalCount,\n hasNextPage: paginationResult.hasNextPage,\n hasPreviousPage: paginationResult.hasPreviousPage,\n onNextPage: () => {\n paginationResult.onNextPage();\n onNextPageCallback?.();\n },\n onPreviousPage: () => {\n paginationResult.onPreviousPage();\n onPreviousPageCallback?.();\n },\n onPageSizeChange: (size: number) => {\n paginationResult.onPageSizeChange(size);\n onPageSizeChangeCallback?.(size);\n },\n showPageSizeOptions,\n getLabel,\n showPaginationLabel,\n };\n }, [\n paginationOptions.type,\n paginationResult.pageSize,\n pageSizeOptions,\n paginationResult.offset,\n paginationResult.totalCount,\n paginationResult.hasNextPage,\n paginationResult.hasPreviousPage,\n paginationResult.onNextPage,\n paginationResult.onPreviousPage,\n paginationResult.onPageSizeChange,\n onNextPageCallback,\n onPreviousPageCallback,\n onPageSizeChangeCallback,\n showPageSizeOptions,\n getLabel,\n showPaginationLabel,\n ]);\n\n return useMemo(\n () => ({\n data: displayData,\n loading: paginationResult.loading,\n isStale,\n error: paginationResult.error,\n pagination,\n sort: sortState,\n }),\n [\n displayData,\n paginationResult.loading,\n isStale,\n paginationResult.error,\n pagination,\n sortState,\n ],\n );\n}\n\n/**\n * A hook that manages table data fetching, pagination, sorting, search, and filtering.\n * Supports three modes: `complete` for client-side data, `offset` for server-side offset pagination, and `cursor` for server-side cursor pagination.\n *\n * @public\n */\nexport function useTable<T extends TableItem, TFilter = unknown>(\n options: UseTableCompleteOptions<T, TFilter>,\n): UseTableResult<T, TFilter>;\n/** @public */\nexport function useTable<T extends TableItem, TFilter = unknown>(\n options: UseTableOffsetOptions<T, TFilter>,\n): UseTableResult<T, TFilter>;\n/** @public */\nexport function useTable<T extends TableItem, TFilter = unknown>(\n options: UseTableCursorOptions<T, TFilter>,\n): UseTableResult<T, TFilter>;\nexport function useTable<T extends TableItem, TFilter = unknown>(\n options: UseTableOptions<T, TFilter>,\n): UseTableResult<T, TFilter> {\n const query = useQueryState<TFilter>(options);\n\n const initialModeRef = useRef(options.mode);\n if (initialModeRef.current !== options.mode) {\n throw new Error(\n `useTable mode cannot change from '${initialModeRef.current}' to '${options.mode}'. ` +\n `The mode must remain stable for the lifetime of the component.`,\n );\n }\n\n let pagination: PaginationResult<T> & { reload: () => void };\n\n if (options.mode === 'complete') {\n pagination = useCompletePagination(options, query);\n } else if (options.mode === 'offset') {\n pagination = useOffsetPagination(options, query);\n } else if (options.mode === 'cursor') {\n pagination = useCursorPagination(options, query);\n } else {\n throw new Error('Invalid mode');\n }\n\n const sortState: SortState = useMemo(\n () => ({ descriptor: query.sort, onSortChange: query.setSort }),\n [query.sort, query.setSort],\n );\n\n const tableProps = useTableProps(\n pagination,\n sortState,\n options.paginationOptions ?? {},\n );\n\n return {\n tableProps,\n reload: pagination.reload,\n filter: { value: query.filter, onChange: query.setFilter },\n search: { value: query.search, onChange: query.setSearch },\n };\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useState, useCallback, useMemo, useEffect, useRef } from 'react';\nimport type { TableItem } from '../types';\nimport type {\n PaginationResult,\n QueryState,\n UseTableCompleteOptions,\n} from './types';\nimport { useStableCallback } from './useStableCallback';\nimport { getEffectivePageSize } from './getEffectivePageSize';\n\n/** @internal */\nexport function useCompletePagination<T extends TableItem, TFilter>(\n options: UseTableCompleteOptions<T, TFilter>,\n query: QueryState<TFilter>,\n): PaginationResult<T> & { reload: () => void } {\n const {\n data,\n getData: getDataProp = () => [],\n paginationOptions = {},\n sortFn,\n filterFn,\n searchFn,\n } = options;\n const hasGetData = 'getData' in options;\n const noPagination = paginationOptions.type === 'none';\n const { initialOffset = 0 } = paginationOptions;\n const defaultPageSize = noPagination\n ? Infinity\n : getEffectivePageSize(paginationOptions);\n\n const getData = useStableCallback(getDataProp);\n const { sort, filter, search } = query;\n\n const [items, setItems] = useState<T[] | undefined>(undefined);\n const [isLoading, setIsLoading] = useState(!data);\n const [error, setError] = useState<Error | undefined>(undefined);\n const [loadCount, setLoadCount] = useState(0);\n\n const [offset, setOffset] = useState(initialOffset);\n const [pageSize, setPageSize] = useState(defaultPageSize);\n\n // Sync pageSize when the caller changes paginationOptions.pageSize\n useEffect(() => {\n setPageSize(defaultPageSize);\n setOffset(0);\n }, [defaultPageSize]);\n\n // Load data on mount and when loadCount changes (reload trigger)\n useEffect(() => {\n if (data) {\n setIsLoading(false);\n return;\n }\n\n if (!hasGetData) {\n return;\n }\n\n let cancelled = false;\n setIsLoading(true);\n setError(undefined);\n\n (async () => {\n try {\n const result = getData();\n const resolvedData = result instanceof Promise ? await result : result;\n if (!cancelled) {\n setItems(resolvedData);\n setIsLoading(false);\n }\n } catch (err) {\n if (!cancelled) {\n setError(err instanceof Error ? err : new Error(String(err)));\n setIsLoading(false);\n }\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [data, getData, hasGetData, loadCount]);\n\n // Reset offset when query changes (query object is memoized)\n const prevQueryRef = useRef(query);\n useEffect(() => {\n if (prevQueryRef.current !== query) {\n prevQueryRef.current = query;\n setOffset(0);\n }\n }, [query]);\n\n const resolvedItems = useMemo(() => data ?? items, [data, items]);\n\n // Process data client-side (filter, search, sort)\n const processedData = useMemo(() => {\n if (!resolvedItems) {\n return undefined;\n }\n let result = [...resolvedItems];\n if (filter !== undefined && filterFn) {\n result = filterFn(result, filter);\n }\n if (search && searchFn) {\n result = searchFn(result, search);\n }\n if (sort && sortFn) {\n result = sortFn(result, sort);\n }\n return result;\n }, [resolvedItems, sort, filter, search, filterFn, searchFn, sortFn]);\n\n const totalCount = processedData?.length ?? 0;\n\n // Paginate the processed data\n const paginatedData = useMemo(\n () =>\n noPagination\n ? processedData\n : processedData?.slice(offset, offset + pageSize),\n [processedData, offset, pageSize, noPagination],\n );\n\n const hasNextPage = !noPagination && offset + pageSize < totalCount;\n const hasPreviousPage = !noPagination && offset > 0;\n\n const onNextPage = useCallback(() => {\n if (offset + pageSize < totalCount) {\n setOffset(offset + pageSize);\n }\n }, [offset, pageSize, totalCount]);\n\n const onPreviousPage = useCallback(() => {\n if (offset > 0) {\n setOffset(Math.max(0, offset - pageSize));\n }\n }, [offset, pageSize]);\n\n const onPageSizeChange = useCallback((newSize: number) => {\n setPageSize(newSize);\n setOffset(0);\n }, []);\n\n const reload = useCallback(() => {\n setOffset(0);\n setLoadCount(c => c + 1);\n }, []);\n\n return {\n data: paginatedData,\n loading: isLoading,\n error,\n totalCount,\n offset,\n pageSize,\n hasNextPage,\n hasPreviousPage,\n onNextPage,\n onPreviousPage,\n onPageSizeChange,\n reload,\n };\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useState, useCallback } from 'react';\nimport type { TableItem } from '../types';\nimport type {\n UseTableOffsetOptions,\n OffsetParams,\n QueryState,\n PaginationResult,\n} from './types';\nimport { usePageCache } from './usePageCache';\nimport { useStableCallback } from './useStableCallback';\nimport { useDebouncedReload } from './useDebouncedReload';\nimport { getEffectivePageSize } from './getEffectivePageSize';\n\nexport function useOffsetPagination<T extends TableItem, TFilter>(\n options: UseTableOffsetOptions<T, TFilter>,\n query: QueryState<TFilter>,\n): PaginationResult<T> & { reload: () => void } {\n const { getData: getDataProp, paginationOptions = {} } = options;\n const { initialOffset = 0 } = paginationOptions;\n const defaultPageSize = getEffectivePageSize(paginationOptions);\n\n const getData = useStableCallback(getDataProp);\n const { sort, filter, search } = query;\n\n const [pageSize, setPageSize] = useState(defaultPageSize);\n\n const wrappedGetData = useCallback(\n async ({\n cursor,\n signal,\n }: {\n cursor: number | undefined;\n signal: AbortSignal;\n }) => {\n const currentOffset = cursor ?? 0;\n\n const params: OffsetParams<TFilter> = {\n offset: currentOffset,\n pageSize,\n sort,\n filter,\n search,\n signal,\n };\n\n const response = await getData(params);\n\n const prevCursor =\n currentOffset > 0 ? Math.max(0, currentOffset - pageSize) : undefined;\n const nextCursor =\n currentOffset + pageSize < response.totalCount\n ? currentOffset + pageSize\n : undefined;\n\n return {\n data: response.data,\n prevCursor,\n nextCursor,\n totalCount: response.totalCount,\n };\n },\n [getData, pageSize, sort, filter, search],\n );\n\n const cache = usePageCache<T, number>({\n getData: wrappedGetData,\n initialCurrentCursor: initialOffset > 0 ? initialOffset : undefined,\n });\n\n useDebouncedReload(query, pageSize, cache.reload);\n\n const onPageSizeChange = useCallback(\n (newSize: number) => setPageSize(newSize),\n [],\n );\n\n return {\n data: cache.data,\n loading: cache.loading,\n error: cache.error,\n totalCount: cache.totalCount,\n offset: cache.currentCursor ?? 0,\n pageSize,\n hasNextPage: cache.hasNextPage,\n hasPreviousPage: cache.hasPreviousPage,\n onNextPage: cache.onNextPage,\n onPreviousPage: cache.onPreviousPage,\n onPageSizeChange,\n reload: cache.reload,\n };\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useState, useCallback } from 'react';\nimport type { TableItem } from '../types';\nimport type {\n UseTableCursorOptions,\n CursorParams,\n QueryState,\n PaginationResult,\n} from './types';\nimport { usePageCache } from './usePageCache';\nimport { useStableCallback } from './useStableCallback';\nimport { useDebouncedReload } from './useDebouncedReload';\nimport { getEffectivePageSize } from './getEffectivePageSize';\n\nexport function useCursorPagination<T extends TableItem, TFilter>(\n options: UseTableCursorOptions<T, TFilter>,\n query: QueryState<TFilter>,\n): PaginationResult<T> & { reload: () => void } {\n const { getData: getDataProp, paginationOptions = {} } = options;\n const defaultPageSize = getEffectivePageSize(paginationOptions);\n\n const getData = useStableCallback(getDataProp);\n const { sort, filter, search } = query;\n\n const [pageSize, setPageSize] = useState(defaultPageSize);\n\n const wrappedGetData = useCallback(\n async ({\n cursor,\n signal,\n }: {\n cursor: string | undefined;\n signal: AbortSignal;\n }) => {\n const params: CursorParams<TFilter> = {\n cursor,\n pageSize,\n sort,\n filter,\n search,\n signal,\n };\n\n const response = await getData(params);\n\n return {\n data: response.data,\n prevCursor: response.prevCursor,\n nextCursor: response.nextCursor,\n totalCount: response.totalCount,\n };\n },\n [getData, pageSize, sort, filter, search],\n );\n\n const cache = usePageCache<T, string>({ getData: wrappedGetData });\n\n useDebouncedReload(query, pageSize, cache.reload);\n\n const onPageSizeChange = useCallback(\n (newSize: number) => setPageSize(newSize),\n [],\n );\n\n return {\n data: cache.data,\n loading: cache.loading,\n error: cache.error,\n totalCount: cache.totalCount,\n offset: undefined,\n pageSize,\n hasNextPage: cache.hasNextPage,\n hasPreviousPage: cache.hasPreviousPage,\n onNextPage: cache.onNextPage,\n onPreviousPage: cache.onPreviousPage,\n onPageSizeChange,\n reload: cache.reload,\n };\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { CodeSnippet } from '@backstage/core-components';\nimport { catalogTranslationRef } from '../../alpha/translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst ENTITY_YAML = `metadata:\n name: example\n labels:\n javaVersion: 1.2.3`;\n\n/** @public */\nexport type EntityLabelsEmptyStateClassKey = 'code';\n\nconst useStyles = makeStyles(\n theme => ({\n code: {\n borderRadius: 6,\n margin: theme.spacing(2, 0),\n background:\n theme.palette.type === 'dark' ? '#444' : theme.palette.common.white,\n },\n }),\n { name: 'PluginCatalogEntityLabelsEmptyState' },\n);\n\nexport function EntityLabelsEmptyState() {\n const classes = useStyles();\n const { t } = useTranslationRef(catalogTranslationRef);\n\n return (\n <>\n <Typography variant=\"body1\">\n {t('entityLabelsCard.emptyDescription')}\n </Typography>\n <div className={classes.code}>\n <CodeSnippet\n text={ENTITY_YAML}\n language=\"yaml\"\n showLineNumbers\n highlightedNumbers={[3, 4, 5, 6]}\n customStyle={{ background: 'inherit', fontSize: '115%' }}\n />\n </div>\n <Button\n variant=\"contained\"\n color=\"primary\"\n target=\"_blank\"\n href=\"https://backstage.io/docs/features/software-catalog/descriptor-format#labels-optional\"\n >\n {t('entityLabelsCard.readMoreButtonTitle')}\n </Button>\n </>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEntity, EntityInfoCard } from '@backstage/plugin-catalog-react';\nimport { EntityLabelsEmptyState } from './EntityLabelsEmptyState';\nimport {\n Table,\n CellText,\n useTable,\n type ColumnConfig,\n type TableItem,\n} from '@backstage/ui';\nimport { catalogTranslationRef } from '../../alpha/translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { useMemo } from 'react';\n\n/** @public */\nexport interface EntityLabelsCardProps {\n title?: string;\n}\n\ninterface LabelItem extends TableItem {\n id: string;\n key: string;\n value: string;\n}\n\nexport const EntityLabelsCard = (props: EntityLabelsCardProps) => {\n const { title } = props;\n const { entity } = useEntity();\n const { t } = useTranslationRef(catalogTranslationRef);\n\n const labels = entity?.metadata?.labels;\n\n const columnConfig: ColumnConfig<LabelItem>[] = useMemo(\n () => [\n {\n id: 'key',\n label: t('entityLabelsCard.columnKeyLabel'),\n isRowHeader: true,\n cell: item => <CellText title={item.key} />,\n },\n {\n id: 'value',\n label: t('entityLabelsCard.columnValueLabel'),\n cell: item => <CellText title={item.value} />,\n },\n ],\n [t],\n );\n\n const data = useMemo(\n () =>\n Object.keys(labels ?? {}).map(labelKey => ({\n id: labelKey,\n key: labelKey,\n value: labels![labelKey],\n })),\n [labels],\n );\n\n const { tableProps } = useTable({\n mode: 'complete',\n data,\n paginationOptions: { pageSize: 5 },\n });\n\n return (\n <EntityInfoCard title={title || t('entityLabelsCard.title')}>\n {!labels || Object.keys(labels).length === 0 ? (\n <EntityLabelsEmptyState />\n ) : (\n <Table columnConfig={columnConfig} {...tableProps} />\n )}\n </EntityInfoCard>\n );\n};\n"],"names":["ButtonIconDefinition","defineComponent","styles","ButtonIcon","forwardRef","props","ref","ownProps","restProps","dataAttributes","useDefinition","classes","icon","loading","RAButton","isPending","ProgressBar","RiLoader4Line","Cell","CellDefinition","ReactAriaCell","CellText","CellTextDefinition","title","description","color","leadingIcon","href","Link","Text","Column","ColumnDefinition","children","ReactAriaColumn","allowsSorting","RiArrowUpLine","TableRoot","TableDefinition","ReactAriaTable","CheckboxDefinition","Checkbox","ariaLabel","ariaLabelledBy","useEffect","console","RACheckbox","isIndeterminate","RiSubtractLine","RiCheckLine","TableHeader","selectionBehavior","selectionMode","useTableOptions","TableHeaderDefinition","columns","ReactAriaTableHeader","Flex","Collection","TableBody","TableBodyDefinition","ReactAriaTableBody","Row","analytics","RowDefinition","isExternal","isExternalLink","hasInternalHref","hasExternalHref","hasInteraction","effectiveTarget","effectiveRel","Set","Boolean","handlePress","String","undefined","content","clsx","ReactAriaRow","SelectDefinition","SelectTriggerDefinition","SelectContentDefinition","SelectListBoxDefinition","PopoverDefinition","FieldLabelDefinition","FieldLabel","label","secondaryLabel","htmlFor","id","descriptionId","Label","FieldErrorDefinition","FieldError","AriaFieldError","SelectTrigger","Button","SelectValue","RiArrowDownSLine","NoResults","SelectListBox","options","ListBox","option","ListBoxItem","SelectContent","contains","useFilter","searchable","searchPlaceholder","Autocomplete","SearchField","Input","RiCloseCircleLine","Select","popoverOwnProps","isRequired","AriaSelect","Popover","TablePaginationDefinition","getOptionValue","TablePagination","pageSize","pageSizeOptions","offset","totalCount","hasNextPage","hasPreviousPage","onNextPage","onPreviousPage","onPageSizeChange","showPageSizeOptions","getLabel","showPaginationLabel","labelId","useId","normalizedOptions","useMemo","value","effectivePageSize","opt","firstValue","showLabel","hasItems","fromCount","toCount","Math","newPageSize","Number","RiArrowLeftSLine","RiArrowRightSLine","SkeletonDefinition","Skeleton","width","height","style","SKELETON_WIDTHS","skeletonItems","Array","_","i","TableBodySkeleton","item","rowIndex","column","Table","columnConfig","data","isStale","error","pagination","sort","rowConfig","selection","emptyState","className","virtualized","elem","TableWrapperDefinition","liveRegionId","visibleColumns","col","disabledRows","useDisabledRows","set","isDisabled","selectedKeys","onSelectionChange","isInitialLoading","liveRegionLabel","useLiveRegionLabel","isLoading","hasData","wrapResizable","manualColumnSizing","ResizableTableContainer","VisuallyHidden","itemIndex","Virtualizer","TableLayout","useControlledStateHelper","initialValue","controlledValue","onChange","internalValue","setInternalValue","useState","useCallback","newValue","useStableCallback","fn","useRef","args","getEffectivePageSize","paginationOptions","FIRST_PAGE_CURSOR","Symbol","PageCacheStore","Map","cursor","existing","entry","direction","currentCursor","initialCurrentCursor","toInternalCursor","currentEntry","toExternalCursor","usePageCache","getData","setCurrentCursor","cacheStore","setLoading","setError","setTotalCount","abortControllerRef","currentPage","goToPage","targetCursor","existingEntry","abortController","AbortController","result","err","Error","page","reload","reloadOptions","useDebouncedReload","query","delay","prevDepsRef","prev","timer","setTimeout","clearTimeout","useTable","useQueryState","setSort","filter","setFilter","search","setSearch","initialModeRef","useCompletePagination","getDataProp","sortFn","filterFn","searchFn","hasGetData","noPagination","initialOffset","defaultPageSize","Infinity","items","setItems","setIsLoading","loadCount","setLoadCount","setOffset","setPageSize","cancelled","resolvedData","Promise","prevQueryRef","resolvedItems","processedData","paginatedData","newSize","c","useOffsetPagination","cache","signal","currentOffset","response","prevCursor","nextCursor","useCursorPagination","tableProps","useTableProps","paginationResult","sortState","onPageSizeChangeCallback","onNextPageCallback","onPreviousPageCallback","previousDataRef","displayData","size","ENTITY_YAML","useStyles","makeStyles","theme","EntityLabelsEmptyState","t","useTranslationRef","catalogTranslationRef","Typography","CodeSnippet","EntityLabelsCard","entity","useEntity","labels","Object","labelKey","EntityInfoCard"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["4587"],{20534(e){e.exports=JSON.parse('{"name":"@backstage/plugin-app","version":"0.4.3-next.2","backstage":{"role":"frontend-plugin","pluginId":"app","pluginPackages":["@backstage/plugin-app","@backstage/plugin-app-backend","@backstage/plugin-app-node","@backstage/plugin-app-react"]},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/backstage/backstage","directory":"plugins/app"},"license":"Apache-2.0","sideEffects":false,"exports":{".":"./src/index.ts","./alpha":"./src/alpha/index.ts","./package.json":"./package.json"},"main":"src/index.ts","types":"src/index.ts","typesVersions":{"*":{"alpha":["src/alpha/index.ts"],"package.json":["package.json"]}},"files":["dist"],"scripts":{"build":"backstage-cli package build","clean":"backstage-cli package clean","lint":"backstage-cli package lint","prepack":"backstage-cli package prepack","postpack":"backstage-cli package postpack","start":"backstage-cli package start","test":"backstage-cli package test"},"dependencies":{"@backstage/core-components":"workspace:^","@backstage/core-plugin-api":"workspace:^","@backstage/filter-predicates":"workspace:^","@backstage/frontend-plugin-api":"workspace:^","@backstage/integration-react":"workspace:^","@backstage/plugin-app-react":"workspace:^","@backstage/plugin-permission-react":"workspace:^","@backstage/theme":"workspace:^","@backstage/types":"workspace:^","@backstage/ui":"workspace:^","@backstage/version-bridge":"workspace:^","@material-ui/core":"^4.9.13","@material-ui/icons":"^4.9.1","@material-ui/lab":"^4.0.0-alpha.61","@react-aria/button":"^3.14.3","@react-aria/toast":"^3.0.9","@react-hookz/web":"^24.0.0","@react-stately/toast":"^3.1.2","@remixicon/react":"^4.6.0","motion":"^12.0.0","react-use":"^17.2.4","zen-observable":"^0.10.0","zod":"^3.25.76 || ^4.0.0"},"devDependencies":{"@backstage/cli":"workspace:^","@backstage/dev-utils":"workspace:^","@backstage/frontend-defaults":"workspace:^","@backstage/frontend-test-utils":"workspace:^","@backstage/test-utils":"workspace:^","@testing-library/jest-dom":"^6.0.0","@testing-library/react":"^16.0.0","@testing-library/user-event":"^14.0.0","@types/react":"^18.0.0","msw":"^1.0.0","react":"^18.0.2","react-dom":"^18.0.2","react-router-dom":"^6.30.2"},"peerDependencies":{"@types/react":"^17.0.0 || ^18.0.0","react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0","react-router-dom":"^6.30.2"},"peerDependenciesMeta":{"@types/react":{"optional":true}}}')}}]);
2
- //# sourceMappingURL=4587.bf73bd77.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/4587.bf73bd77.chunk.js","sources":["webpack://techdocs-cli-embedded-app/json|/home/runner/work/publishing/publishing/plugins/app/package.json"],"sourcesContent":["module.exports = JSON.parse('{\"name\":\"@backstage/plugin-app\",\"version\":\"0.4.3-next.2\",\"backstage\":{\"role\":\"frontend-plugin\",\"pluginId\":\"app\",\"pluginPackages\":[\"@backstage/plugin-app\",\"@backstage/plugin-app-backend\",\"@backstage/plugin-app-node\",\"@backstage/plugin-app-react\"]},\"publishConfig\":{\"access\":\"public\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/backstage/backstage\",\"directory\":\"plugins/app\"},\"license\":\"Apache-2.0\",\"sideEffects\":false,\"exports\":{\".\":\"./src/index.ts\",\"./alpha\":\"./src/alpha/index.ts\",\"./package.json\":\"./package.json\"},\"main\":\"src/index.ts\",\"types\":\"src/index.ts\",\"typesVersions\":{\"*\":{\"alpha\":[\"src/alpha/index.ts\"],\"package.json\":[\"package.json\"]}},\"files\":[\"dist\"],\"scripts\":{\"build\":\"backstage-cli package build\",\"clean\":\"backstage-cli package clean\",\"lint\":\"backstage-cli package lint\",\"prepack\":\"backstage-cli package prepack\",\"postpack\":\"backstage-cli package postpack\",\"start\":\"backstage-cli package start\",\"test\":\"backstage-cli package test\"},\"dependencies\":{\"@backstage/core-components\":\"workspace:^\",\"@backstage/core-plugin-api\":\"workspace:^\",\"@backstage/filter-predicates\":\"workspace:^\",\"@backstage/frontend-plugin-api\":\"workspace:^\",\"@backstage/integration-react\":\"workspace:^\",\"@backstage/plugin-app-react\":\"workspace:^\",\"@backstage/plugin-permission-react\":\"workspace:^\",\"@backstage/theme\":\"workspace:^\",\"@backstage/types\":\"workspace:^\",\"@backstage/ui\":\"workspace:^\",\"@backstage/version-bridge\":\"workspace:^\",\"@material-ui/core\":\"^4.9.13\",\"@material-ui/icons\":\"^4.9.1\",\"@material-ui/lab\":\"^4.0.0-alpha.61\",\"@react-aria/button\":\"^3.14.3\",\"@react-aria/toast\":\"^3.0.9\",\"@react-hookz/web\":\"^24.0.0\",\"@react-stately/toast\":\"^3.1.2\",\"@remixicon/react\":\"^4.6.0\",\"motion\":\"^12.0.0\",\"react-use\":\"^17.2.4\",\"zen-observable\":\"^0.10.0\",\"zod\":\"^3.25.76 || ^4.0.0\"},\"devDependencies\":{\"@backstage/cli\":\"workspace:^\",\"@backstage/dev-utils\":\"workspace:^\",\"@backstage/frontend-defaults\":\"workspace:^\",\"@backstage/frontend-test-utils\":\"workspace:^\",\"@backstage/test-utils\":\"workspace:^\",\"@testing-library/jest-dom\":\"^6.0.0\",\"@testing-library/react\":\"^16.0.0\",\"@testing-library/user-event\":\"^14.0.0\",\"@types/react\":\"^18.0.0\",\"msw\":\"^1.0.0\",\"react\":\"^18.0.2\",\"react-dom\":\"^18.0.2\",\"react-router-dom\":\"^6.30.2\"},\"peerDependencies\":{\"@types/react\":\"^17.0.0 || ^18.0.0\",\"react\":\"^17.0.0 || ^18.0.0\",\"react-dom\":\"^17.0.0 || ^18.0.0\",\"react-router-dom\":\"^6.30.2\"},\"peerDependenciesMeta\":{\"@types/react\":{\"optional\":true}}}')"],"names":["JSON"],"mappings":"kIAAA,EAAO,OAAO,CAAGA,KAAK,KAAK,CAAC,s3E"}