dinocollab-shared 1.2.45 → 1.2.46

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 (41) hide show
  1. package/dist/cart/widget.js +1 -1
  2. package/dist/cart/widget.js.map +1 -1
  3. package/dist/factory/cart-content/create.cart-content.js +1 -1
  4. package/dist/factory/cart-item/create.cart-item.js +1 -1
  5. package/dist/factory/cart-item/create.cart-item.js.map +1 -1
  6. package/dist/media-player/core/btn.volume.js +1 -1
  7. package/dist/media-player/core/btn.volume.js.map +1 -1
  8. package/dist/media-player/core/progressBar.js +1 -1
  9. package/dist/media-player/core/progressBar.js.map +1 -1
  10. package/dist/media-player/core/videoplayer.js +1 -1
  11. package/dist/media-player/core/videoplayer.js.map +1 -1
  12. package/dist/media-player/muted.js +1 -1
  13. package/dist/media-player/muted.js.map +1 -1
  14. package/dist/media-player/player.video-stream.js.map +1 -1
  15. package/dist/media-right/media-widget/media-group-accordion.js +1 -1
  16. package/dist/media-right/media-widget/media-group-accordion.js.map +1 -1
  17. package/dist/notification/content-converter.js +2 -0
  18. package/dist/notification/content-converter.js.map +1 -0
  19. package/dist/notification/index.js +1 -1
  20. package/dist/notification/notify-detail.js +1 -1
  21. package/dist/notification/notify-detail.js.map +1 -1
  22. package/dist/types/media-player/core/btn.volume.d.ts.map +1 -1
  23. package/dist/types/media-player/core/progressBar.d.ts +3 -2
  24. package/dist/types/media-player/core/progressBar.d.ts.map +1 -1
  25. package/dist/types/media-player/core/videoplayer.d.ts +5 -4
  26. package/dist/types/media-player/core/videoplayer.d.ts.map +1 -1
  27. package/dist/types/media-player/muted.d.ts +2 -2
  28. package/dist/types/media-player/muted.d.ts.map +1 -1
  29. package/dist/types/media-player/player.video-stream.d.ts +2 -2
  30. package/dist/types/media-player/player.video-stream.d.ts.map +1 -1
  31. package/dist/types/notification/content-converter.d.ts +14 -0
  32. package/dist/types/notification/content-converter.d.ts.map +1 -0
  33. package/dist/types/notification/index.d.ts +1 -0
  34. package/dist/types/notification/index.d.ts.map +1 -1
  35. package/dist/types/notification/notify-detail.d.ts +1 -1
  36. package/dist/types/notification/notify-detail.d.ts.map +1 -1
  37. package/package.json +1 -1
  38. package/dist/notification/class.config.js +0 -2
  39. package/dist/notification/class.config.js.map +0 -1
  40. package/dist/types/notification/class.config.d.ts +0 -21
  41. package/dist/types/notification/class.config.d.ts.map +0 -1
@@ -1,2 +1,2 @@
1
- import{slicedToArray as r,objectSpread2 as t}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o,jsxs as e}from"react/jsx-runtime";import{useState as n,useCallback as i,Fragment as l}from"react";import{useTheme as a,useMediaQuery as c,Stack as s,Typography as m,Badge as u,Drawer as d}from"@mui/material";import p from"@mui/icons-material/ShoppingCartOutlined";import{Root as f,MenuStyled as h,ItemTag as v}from"./styled.js";import{IconButtonDark as C}from"../components/buttons.js";import"../components/no-data-panel.js";import{getTotalData as g}from"./helpers.js";import{createCartContent as x}from"../factory/cart-content/create.cart-content.js";import{createCartItem as b}from"../factory/cart-item/create.cart-item.js";var P=x({labels:{title:"Your Cart",buttonCheckout:"Show in cart"},empty:{title:"Your cart is empty",subTitle:"Try adding some products"}}),T=b({slots:{beforeTile:function(r){var t,n,i,l;return e(s,{direction:"row",flexWrap:"wrap",width:"100%",gap:1,alignItems:"center",justifyContent:"space-between",children:[o(v,{variant:"body1",sx:{color:null!==(t=r.item.PriceColor)&&void 0!==t?t:"#000"},children:null!==(n=r.item.PriceName)&&void 0!==n?n:"Unknown Price"}),e(s,{direction:"row",gap:.5,alignItems:"flex-end",children:[e(m,{children:["$",null!==(i=r.item.Price)&&void 0!==i?i:0]}),e(m,{variant:"body1",sx:{fontSize:"14px",color:"#818181"},children:["x",null!==(l=r.item.Amount)&&void 0!==l?l:0," urls"]})]})]})}}}),y=function(t){var v,x,b=n(null),y=r(b,2),j=y[0],k=y[1],w=n(!1),S=r(w,2),M=S[0],W=S[1],z=a(),B=c(z.breakpoints.down("sm")),I=null!==(v=t.carts)&&void 0!==v?v:[];n(function(){W(!0)});var L=function(){k(null)},N=i(function(){return o(P,{carts:I,isMobile:B,onClose:L,buttonMoveToCartProps:t.buttonMoveToCartProps,onCheckout:function(r){L(),t.onMoveToCartClick&&t.onMoveToCartClick(r)},slots:{headerRight:function(r){var t,n=g(r.carts);return e(s,{justifyContent:"flex-end",children:[o(m,{variant:"caption",sx:{textTransform:"uppercase",fontWeight:500,letterSpacing:"0.1em",color:"var(--color-text-secondary)"},children:"Total"}),e(m,{variant:"h6",sx:{fontWeight:700,color:"#e88c3f"},children:["$",null===(t=n.price)||void 0===t?void 0:t.toFixed(2)]})]})},item:function(r,e){var n;return o(T,{item:r,name:r.ProductName,imageUrl:r.PictureUrl,onRemoveCart:t.onRemoveCart,itemTitleProps:t.itemTitleProps,itemTitlePropsGetter:t.itemTitlePropsGetter,onClose:L},null!==(n=r.ProductId)&&void 0!==n?n:e)}}})},[I,B,t,L]);return e(l,{children:[o(C,{onClick:function(r){return t=r.currentTarget,void k(t);var t},children:o(u,{badgeContent:M&&null!==(x=I.length)&&void 0!==x?x:0,color:"error",children:o(p,{fontSize:"small"})})}),B?o(d,{anchor:"right",open:Boolean(j),onClose:L,disableScrollLock:!0,PaperProps:{sx:{width:"calc(100% - 100px)",maxWidth:360}},children:o(f,{children:N()})}):o(h,{disableScrollLock:!0,anchorEl:j,open:Boolean(j),onClose:L,anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{component:"div",sx:{display:"flex",flexDirection:"column"}},children:o(f,{children:N()})})]})},j=function(r){var e=function(e){return o(y,t(t({},r),e))};return e.displayName="CartWidget",e};export{y as CartWidget,j as createCartWidget};
1
+ import{slicedToArray as r,objectSpread2 as t}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o,jsxs as e}from"react/jsx-runtime";import{useState as i,useCallback as n,Fragment as l}from"react";import{useTheme as a,useMediaQuery as c,Stack as s,Typography as m,Badge as u,Drawer as d}from"@mui/material";import p from"@mui/icons-material/ShoppingCartOutlined";import{Root as f,MenuStyled as h,ItemTag as v}from"./styled.js";import{getTotalData as C}from"./helpers.js";import{createCartContent as g}from"../factory/cart-content/create.cart-content.js";import{createCartItem as x}from"../factory/cart-item/create.cart-item.js";import{IconButtonDark as b}from"../components/buttons.js";var P=g({labels:{title:"Your Cart",buttonCheckout:"Show in cart"},empty:{title:"Your cart is empty",subTitle:"Try adding some products"}}),T=x({slots:{beforeTile:function(r){var t,i,n,l;return e(s,{direction:"row",flexWrap:"wrap",width:"100%",gap:1,alignItems:"center",justifyContent:"space-between",children:[o(v,{variant:"body1",sx:{color:null!==(t=r.item.PriceColor)&&void 0!==t?t:"#000"},children:null!==(i=r.item.PriceName)&&void 0!==i?i:"Unknown Price"}),e(s,{direction:"row",gap:.5,alignItems:"flex-end",children:[e(m,{children:["$",null!==(n=r.item.Price)&&void 0!==n?n:0]}),e(m,{variant:"body1",sx:{fontSize:"14px",color:"#818181"},children:["x",null!==(l=r.item.Amount)&&void 0!==l?l:0," urls"]})]})]})}}}),y=function(t){var v,g,x=i(null),y=r(x,2),j=y[0],k=y[1],w=i(!1),S=r(w,2),M=S[0],W=S[1],z=a(),B=c(z.breakpoints.down("sm")),I=null!==(v=t.carts)&&void 0!==v?v:[];i(function(){W(!0)});var L=function(){k(null)},N=n(function(){return o(P,{carts:I,isMobile:B,onClose:L,buttonMoveToCartProps:t.buttonMoveToCartProps,onCheckout:function(r){L(),t.onMoveToCartClick&&t.onMoveToCartClick(r)},slots:{headerRight:function(r){var t,i=C(r.carts);return e(s,{justifyContent:"flex-end",children:[o(m,{variant:"caption",sx:{textTransform:"uppercase",fontWeight:500,letterSpacing:"0.1em",color:"var(--color-text-secondary)"},children:"Total"}),e(m,{variant:"h6",sx:{fontWeight:700,color:"#e88c3f"},children:["$",null===(t=i.price)||void 0===t?void 0:t.toFixed(2)]})]})},item:function(r,e){var i;return o(T,{item:r,name:r.ProductName,imageUrl:r.PictureUrl,onRemoveCart:t.onRemoveCart,itemTitleProps:t.itemTitleProps,itemTitlePropsGetter:t.itemTitlePropsGetter,onClose:L},null!==(i=r.ProductId)&&void 0!==i?i:e)}}})},[I,B,t,L]);return e(l,{children:[o(b,{onClick:function(r){return t=r.currentTarget,void k(t);var t},children:o(u,{badgeContent:M&&null!==(g=I.length)&&void 0!==g?g:0,color:"error",children:o(p,{fontSize:"small"})})}),B?o(d,{anchor:"right",open:Boolean(j),onClose:L,disableScrollLock:!0,PaperProps:{sx:{width:"calc(100% - 100px)",maxWidth:360}},children:o(f,{children:N()})}):o(h,{disableScrollLock:!0,anchorEl:j,open:Boolean(j),onClose:L,anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{component:"div",sx:{display:"flex",flexDirection:"column"}},children:o(f,{children:N()})})]})},j=function(r){var e=function(e){return o(y,t(t({},r),e))};return e.displayName="CartWidget",e};export{y as CartWidget,j as createCartWidget};
2
2
  //# sourceMappingURL=widget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"widget.js","sources":["../../src/cart/widget.tsx"],"sourcesContent":["import { Fragment, useState, FC, useCallback } from 'react'\r\nimport { Badge, ButtonProps, Drawer, Stack, Typography, TypographyProps, useMediaQuery, useTheme } from '@mui/material'\r\nimport ShoppingCartOutlinedIcon from '@mui/icons-material/ShoppingCartOutlined'\r\nimport { ICartItem } from './types'\r\nimport { IAppSiteBaseUrl } from '../types'\r\nimport { ItemTag, MenuStyled, Root } from './styled'\r\nimport { IconButtonDark } from '../components'\r\nimport { getTotalData } from './helpers'\r\nimport createCartContent from '../factory/cart-content/create.cart-content'\r\nimport createCartItem from '../factory/cart-item/create.cart-item'\r\n\r\ninterface ICartWidgetProps {\r\n baseUrl: IAppSiteBaseUrl\r\n carts?: ICartItem[]\r\n hrefCart?: string\r\n buttonMoveToCartProps?: ButtonProps & { [key: string]: any }\r\n storageKey?: string\r\n onRemoveCart?: (item: ICartItem) => void\r\n onMoveToCartClick?: (e: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement, MouseEvent>) => void\r\n itemTitleProps?: TypographyProps & { [key: string]: any }\r\n itemTitlePropsGetter?: (item: ICartItem, close?: () => void) => TypographyProps & { [key: string]: any }\r\n}\r\n\r\nconst CartContent = createCartContent<ICartItem>({\r\n labels: {\r\n title: 'Your Cart',\r\n buttonCheckout: 'Show in cart'\r\n },\r\n empty: {\r\n title: 'Your cart is empty',\r\n subTitle: 'Try adding some products'\r\n }\r\n})\r\n\r\nconst CartItem = createCartItem<ICartItem>({\r\n slots: {\r\n beforeTile: (ctx) => (\r\n <Stack direction='row' flexWrap={'wrap'} width={'100%'} gap={1} alignItems='center' justifyContent={'space-between'}>\r\n <ItemTag variant='body1' sx={{ color: ctx.item.PriceColor ?? '#000' }}>\r\n {ctx.item.PriceName ?? 'Unknown Price'}\r\n </ItemTag>\r\n <Stack direction='row' gap={0.5} alignItems='flex-end'>\r\n <Typography>${ctx.item.Price ?? 0}</Typography>\r\n <Typography variant='body1' sx={{ fontSize: '14px', color: '#818181' }}>\r\n x{ctx.item.Amount ?? 0} urls\r\n </Typography>\r\n </Stack>\r\n </Stack>\r\n )\r\n }\r\n})\r\n\r\nexport const CartWidget: FC<ICartWidgetProps> = (props) => {\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const [hydrated, setHydrated] = useState(false)\r\n const theme = useTheme()\r\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'))\r\n\r\n const carts = props.carts ?? []\r\n\r\n // Use effect to set hydrated on mount\r\n useState(() => {\r\n setHydrated(true)\r\n })\r\n\r\n const onOpen = (target: HTMLElement) => {\r\n setAnchorEl(target)\r\n }\r\n\r\n const onClose = () => {\r\n setAnchorEl(null)\r\n }\r\n\r\n const renderContent = useCallback(() => (\r\n <CartContent\r\n carts={carts}\r\n isMobile={isMobile}\r\n onClose={onClose}\r\n buttonMoveToCartProps={props.buttonMoveToCartProps}\r\n onCheckout={(event) => {\r\n onClose()\r\n if (props.onMoveToCartClick) props.onMoveToCartClick(event as React.MouseEvent<HTMLAnchorElement | HTMLButtonElement, MouseEvent>)\r\n }}\r\n slots={{\r\n headerRight: (ctx) => {\r\n const totalData = getTotalData(ctx.carts)\r\n return (\r\n <Stack justifyContent={'flex-end'}>\r\n <Typography\r\n variant='caption'\r\n sx={{ textTransform: 'uppercase', fontWeight: 500, letterSpacing: '0.1em', color: 'var(--color-text-secondary)' }}\r\n >\r\n Total\r\n </Typography>\r\n <Typography variant='h6' sx={{ fontWeight: 700, color: '#e88c3f' }}>\r\n ${totalData.price?.toFixed(2)}\r\n </Typography>\r\n </Stack>\r\n )\r\n },\r\n item: (item, index) => (\r\n <CartItem\r\n key={item.ProductId ?? index}\r\n item={item}\r\n name={item.ProductName}\r\n imageUrl={item.PictureUrl}\r\n onRemoveCart={props.onRemoveCart}\r\n itemTitleProps={props.itemTitleProps}\r\n itemTitlePropsGetter={props.itemTitlePropsGetter}\r\n onClose={onClose}\r\n />\r\n )\r\n }}\r\n />\r\n ), [carts, isMobile, props, onClose])\r\n\r\n return (\r\n <Fragment>\r\n <IconButtonDark onClick={(e) => onOpen(e.currentTarget)}>\r\n <Badge badgeContent={hydrated ? (carts.length ?? 0) : 0} color='error'>\r\n <ShoppingCartOutlinedIcon fontSize='small' />\r\n </Badge>\r\n </IconButtonDark>\r\n {isMobile ? (\r\n <Drawer\r\n anchor='right'\r\n open={Boolean(anchorEl)}\r\n onClose={onClose}\r\n disableScrollLock\r\n PaperProps={{ sx: { width: 'calc(100% - 100px)', maxWidth: 360 } }}\r\n >\r\n <Root>{renderContent()}</Root>\r\n </Drawer>\r\n ) : (\r\n <MenuStyled\r\n disableScrollLock\r\n anchorEl={anchorEl}\r\n open={Boolean(anchorEl)}\r\n onClose={onClose}\r\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\r\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\r\n MenuListProps={{ component: 'div', sx: { display: 'flex', flexDirection: 'column' } }}\r\n >\r\n <Root>{renderContent()}</Root>\r\n </MenuStyled>\r\n )}\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport const createCartWidget = (params: ICartWidgetProps) => {\r\n const _CartWidget: FC<Partial<ICartWidgetProps>> = (props) => <CartWidget {...params} {...props} />\r\n _CartWidget.displayName = 'CartWidget'\r\n return _CartWidget\r\n}\r\n"],"names":["CartContent","createCartContent","labels","title","buttonCheckout","empty","subTitle","CartItem","createCartItem","slots","beforeTile","ctx","_ctx$item$PriceColor","_ctx$item$PriceName","_ctx$item$Price","_ctx$item$Amount","_jsxs","Stack","direction","flexWrap","width","gap","alignItems","justifyContent","children","_jsx","ItemTag","variant","sx","color","item","PriceColor","PriceName","Typography","Price","fontSize","Amount","CartWidget","props","_props$carts","_carts$length","_useState","useState","_useState2","_slicedToArray","anchorEl","setAnchorEl","_useState3","_useState4","hydrated","setHydrated","theme","useTheme","isMobile","useMediaQuery","breakpoints","down","carts","onClose","renderContent","useCallback","buttonMoveToCartProps","onCheckout","event","onMoveToCartClick","headerRight","_totalData$price","totalData","getTotalData","textTransform","fontWeight","letterSpacing","price","toFixed","index","_item$ProductId","name","ProductName","imageUrl","PictureUrl","onRemoveCart","itemTitleProps","itemTitlePropsGetter","ProductId","Fragment","IconButtonDark","onClick","e","target","currentTarget","Badge","badgeContent","length","ShoppingCartOutlinedIcon","Drawer","anchor","open","Boolean","disableScrollLock","PaperProps","maxWidth","Root","MenuStyled","anchorOrigin","vertical","horizontal","transformOrigin","MenuListProps","component","display","flexDirection","createCartWidget","params","_CartWidget","_objectSpread","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"widget.js","sources":["../../src/cart/widget.tsx"],"sourcesContent":["import { Fragment, useState, FC, useCallback } from 'react'\r\nimport { Badge, ButtonProps, Drawer, Stack, Typography, TypographyProps, useMediaQuery, useTheme } from '@mui/material'\r\nimport ShoppingCartOutlinedIcon from '@mui/icons-material/ShoppingCartOutlined'\r\nimport { ICartItem } from './types'\r\nimport { IAppSiteBaseUrl } from '../types'\r\nimport { ItemTag, MenuStyled, Root } from './styled'\r\nimport { IconButtonDark } from '../components'\r\nimport { getTotalData } from './helpers'\r\nimport createCartContent from '../factory/cart-content/create.cart-content'\r\nimport createCartItem from '../factory/cart-item/create.cart-item'\r\n\r\ninterface ICartWidgetProps {\r\n baseUrl: IAppSiteBaseUrl\r\n carts?: ICartItem[]\r\n hrefCart?: string\r\n buttonMoveToCartProps?: ButtonProps & { [key: string]: any }\r\n storageKey?: string\r\n onRemoveCart?: (item: ICartItem) => void\r\n onMoveToCartClick?: (e: React.MouseEvent<HTMLAnchorElement | HTMLButtonElement, MouseEvent>) => void\r\n itemTitleProps?: TypographyProps & { [key: string]: any }\r\n itemTitlePropsGetter?: (item: ICartItem, close?: () => void) => TypographyProps & { [key: string]: any }\r\n}\r\n\r\nconst CartContent = createCartContent<ICartItem>({\r\n labels: {\r\n title: 'Your Cart',\r\n buttonCheckout: 'Show in cart'\r\n },\r\n empty: {\r\n title: 'Your cart is empty',\r\n subTitle: 'Try adding some products'\r\n }\r\n})\r\n\r\nconst CartItem = createCartItem<ICartItem>({\r\n slots: {\r\n beforeTile: (ctx) => (\r\n <Stack direction='row' flexWrap={'wrap'} width={'100%'} gap={1} alignItems='center' justifyContent={'space-between'}>\r\n <ItemTag variant='body1' sx={{ color: ctx.item.PriceColor ?? '#000' }}>\r\n {ctx.item.PriceName ?? 'Unknown Price'}\r\n </ItemTag>\r\n <Stack direction='row' gap={0.5} alignItems='flex-end'>\r\n <Typography>${ctx.item.Price ?? 0}</Typography>\r\n <Typography variant='body1' sx={{ fontSize: '14px', color: '#818181' }}>\r\n x{ctx.item.Amount ?? 0} urls\r\n </Typography>\r\n </Stack>\r\n </Stack>\r\n )\r\n }\r\n})\r\n\r\nexport const CartWidget: FC<ICartWidgetProps> = (props) => {\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const [hydrated, setHydrated] = useState(false)\r\n const theme = useTheme()\r\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'))\r\n\r\n const carts = props.carts ?? []\r\n\r\n // Use effect to set hydrated on mount\r\n useState(() => {\r\n setHydrated(true)\r\n })\r\n\r\n const onOpen = (target: HTMLElement) => {\r\n setAnchorEl(target)\r\n }\r\n\r\n const onClose = () => {\r\n setAnchorEl(null)\r\n }\r\n\r\n const renderContent = useCallback(() => (\r\n <CartContent\r\n carts={carts}\r\n isMobile={isMobile}\r\n onClose={onClose}\r\n buttonMoveToCartProps={props.buttonMoveToCartProps}\r\n onCheckout={(event) => {\r\n onClose()\r\n if (props.onMoveToCartClick) props.onMoveToCartClick(event as React.MouseEvent<HTMLAnchorElement | HTMLButtonElement, MouseEvent>)\r\n }}\r\n slots={{\r\n headerRight: (ctx) => {\r\n const totalData = getTotalData(ctx.carts)\r\n return (\r\n <Stack justifyContent={'flex-end'}>\r\n <Typography\r\n variant='caption'\r\n sx={{ textTransform: 'uppercase', fontWeight: 500, letterSpacing: '0.1em', color: 'var(--color-text-secondary)' }}\r\n >\r\n Total\r\n </Typography>\r\n <Typography variant='h6' sx={{ fontWeight: 700, color: '#e88c3f' }}>\r\n ${totalData.price?.toFixed(2)}\r\n </Typography>\r\n </Stack>\r\n )\r\n },\r\n item: (item, index) => (\r\n <CartItem\r\n key={item.ProductId ?? index}\r\n item={item}\r\n name={item.ProductName}\r\n imageUrl={item.PictureUrl}\r\n onRemoveCart={props.onRemoveCart}\r\n itemTitleProps={props.itemTitleProps}\r\n itemTitlePropsGetter={props.itemTitlePropsGetter}\r\n onClose={onClose}\r\n />\r\n )\r\n }}\r\n />\r\n ), [carts, isMobile, props, onClose])\r\n\r\n return (\r\n <Fragment>\r\n <IconButtonDark onClick={(e) => onOpen(e.currentTarget)}>\r\n <Badge badgeContent={hydrated ? (carts.length ?? 0) : 0} color='error'>\r\n <ShoppingCartOutlinedIcon fontSize='small' />\r\n </Badge>\r\n </IconButtonDark>\r\n {isMobile ? (\r\n <Drawer\r\n anchor='right'\r\n open={Boolean(anchorEl)}\r\n onClose={onClose}\r\n disableScrollLock\r\n PaperProps={{ sx: { width: 'calc(100% - 100px)', maxWidth: 360 } }}\r\n >\r\n <Root>{renderContent()}</Root>\r\n </Drawer>\r\n ) : (\r\n <MenuStyled\r\n disableScrollLock\r\n anchorEl={anchorEl}\r\n open={Boolean(anchorEl)}\r\n onClose={onClose}\r\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\r\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\r\n MenuListProps={{ component: 'div', sx: { display: 'flex', flexDirection: 'column' } }}\r\n >\r\n <Root>{renderContent()}</Root>\r\n </MenuStyled>\r\n )}\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport const createCartWidget = (params: ICartWidgetProps) => {\r\n const _CartWidget: FC<Partial<ICartWidgetProps>> = (props) => <CartWidget {...params} {...props} />\r\n _CartWidget.displayName = 'CartWidget'\r\n return _CartWidget\r\n}\r\n"],"names":["CartContent","createCartContent","labels","title","buttonCheckout","empty","subTitle","CartItem","createCartItem","slots","beforeTile","ctx","_ctx$item$PriceColor","_ctx$item$PriceName","_ctx$item$Price","_ctx$item$Amount","_jsxs","Stack","direction","flexWrap","width","gap","alignItems","justifyContent","children","_jsx","ItemTag","variant","sx","color","item","PriceColor","PriceName","Typography","Price","fontSize","Amount","CartWidget","props","_props$carts","_carts$length","_useState","useState","_useState2","_slicedToArray","anchorEl","setAnchorEl","_useState3","_useState4","hydrated","setHydrated","theme","useTheme","isMobile","useMediaQuery","breakpoints","down","carts","onClose","renderContent","useCallback","buttonMoveToCartProps","onCheckout","event","onMoveToCartClick","headerRight","_totalData$price","totalData","getTotalData","textTransform","fontWeight","letterSpacing","price","toFixed","index","_item$ProductId","name","ProductName","imageUrl","PictureUrl","onRemoveCart","itemTitleProps","itemTitlePropsGetter","ProductId","Fragment","IconButtonDark","onClick","e","target","currentTarget","Badge","badgeContent","length","ShoppingCartOutlinedIcon","Drawer","anchor","open","Boolean","disableScrollLock","PaperProps","maxWidth","Root","MenuStyled","anchorOrigin","vertical","horizontal","transformOrigin","MenuListProps","component","display","flexDirection","createCartWidget","params","_CartWidget","_objectSpread","displayName"],"mappings":"urBAuBA,IAAMA,EAAcC,EAA6B,CAC/CC,OAAQ,CACNC,MAAO,YACPC,eAAgB,gBAElBC,MAAO,CACLF,MAAO,qBACPG,SAAU,8BAIRC,EAAWC,EAA0B,CACzCC,MAAO,CACLC,WAAY,SAACC,GAAG,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,OACdC,EAACC,EAAM,CAAAC,UAAU,MAAMC,SAAU,OAAQC,MAAO,OAAQC,IAAK,EAAGC,WAAW,SAASC,eAAgB,gBAAeC,SAAA,CACjHC,EAACC,EAAQ,CAAAC,QAAQ,QAAQC,GAAI,CAAEC,MAA0BjB,QAArBA,EAAED,EAAImB,KAAKC,kBAAUnB,IAAAA,EAAAA,EAAI,QAC1DY,SAAkBX,QAAlBA,EAAAF,EAAImB,KAAKE,iBAASnB,IAAAA,EAAAA,EAAI,kBAEzBG,EAACC,EAAK,CAACC,UAAU,MAAMG,IAAK,GAAKC,WAAW,WAAUE,SAAA,CACpDR,EAACiB,EAAa,CAAAT,SAAA,CAAA,IAAcV,QAAdA,EAAAH,EAAImB,KAAKI,aAAKpB,IAAAA,EAAAA,EAAI,KAChCE,EAACiB,EAAU,CAACN,QAAQ,QAAQC,GAAI,CAAEO,SAAU,OAAQN,MAAO,WAAWL,SAAA,CAAA,YAAAT,EAClEJ,EAAImB,KAAKM,cAAM,IAAArB,EAAAA,EAAI,EAAC,gBAGpB,KAKDsB,EAAmC,SAACC,GAAS,IAAAC,EAAAC,EACxDC,EAAgCC,EAA6B,MAAKC,EAAAC,EAAAH,EAAA,GAA3DI,EAAQF,EAAA,GAAEG,EAAWH,EAAA,GAC5BI,EAAgCL,GAAS,GAAMM,EAAAJ,EAAAG,EAAA,GAAxCE,EAAQD,EAAA,GAAEE,EAAWF,EAAA,GACtBG,EAAQC,IACRC,EAAWC,EAAcH,EAAMI,YAAYC,KAAK,OAEhDC,EAAmB,QAAdlB,EAAGD,EAAMmB,aAAK,IAAAlB,EAAAA,EAAI,GAG7BG,EAAS,WACPQ,GAAY,EACd,GAEA,IAIMQ,EAAU,WACdZ,EAAY,KACb,EAEKa,EAAgBC,EAAY,WAAA,OAChCnC,EAACzB,EACC,CAAAyD,MAAOA,EACPJ,SAAUA,EACVK,QAASA,EACTG,sBAAuBvB,EAAMuB,sBAC7BC,WAAY,SAACC,GACXL,IACIpB,EAAM0B,mBAAmB1B,EAAM0B,kBAAkBD,EACtD,EACDtD,MAAO,CACLwD,YAAa,SAACtD,GAAO,IAAAuD,EACbC,EAAYC,EAAazD,EAAI8C,OACnC,OACEzC,EAACC,EAAK,CAACM,eAAgB,WAAUC,SAAA,CAC/BC,EAACQ,EACC,CAAAN,QAAQ,UACRC,GAAI,CAAEyC,cAAe,YAAaC,WAAY,IAAKC,cAAe,QAAS1C,MAAO,+BAA+BL,SAAA,UAInHR,EAACiB,EAAU,CAACN,QAAQ,KAAKC,GAAI,CAAE0C,WAAY,IAAKzC,MAAO,WACnDL,SAAA,CAAA,IAAe,QAAf0C,EAAAC,EAAUK,aAAVN,IAAeA,OAAfA,EAAAA,EAAiBO,QAAQ,QAIlC,EACD3C,KAAM,SAACA,EAAM4C,GAAK,IAAAC,EAAA,OAChBlD,EAAClB,EAEC,CAAAuB,KAAMA,EACN8C,KAAM9C,EAAK+C,YACXC,SAAUhD,EAAKiD,WACfC,aAAc1C,EAAM0C,aACpBC,eAAgB3C,EAAM2C,eACtBC,qBAAsB5C,EAAM4C,qBAC5BxB,QAASA,GAPUiB,QAOHA,EAPX7C,EAAKqD,iBAASR,IAAAA,EAAAA,EAAID,EAQvB,IAIT,EAAE,CAACjB,EAAOJ,EAAUf,EAAOoB,IAE5B,OACE1C,EAACoE,aACC3D,EAAC4D,GAAeC,QAAS,SAACC,GAAC,OArDfC,EAqD2BD,EAAEE,mBApD3C3C,EAAY0C,GADC,IAACA,CAqD2C,EAAAhE,SACrDC,EAACiE,GAAMC,aAAc1C,GAAwB,QAAhBT,EAAIiB,EAAMmC,cAAMpD,IAAAA,EAAAA,EAAS,EAAGX,MAAM,QAAOL,SACpEC,EAACoE,EAAwB,CAAC1D,SAAS,cAGtCkB,EACC5B,EAACqE,EAAM,CACLC,OAAO,QACPC,KAAMC,QAAQpD,GACda,QAASA,EACTwC,mBACA,EAAAC,WAAY,CAAEvE,GAAI,CAAER,MAAO,qBAAsBgF,SAAU,eAE3D3E,EAAC4E,YAAM1C,QAGTlC,EAAC6E,GACCJ,mBAAiB,EACjBrD,SAAUA,EACVmD,KAAMC,QAAQpD,GACda,QAASA,EACT6C,aAAc,CAAEC,SAAU,MAAOC,WAAY,SAC7CC,gBAAiB,CAAEF,SAAU,MAAOC,WAAY,SAChDE,cAAe,CAAEC,UAAW,MAAOhF,GAAI,CAAEiF,QAAS,OAAQC,cAAe,WAAYtF,SAErFC,EAAC4E,EAAI,CAAA7E,SAAEmC,UAKjB,EAEaoD,EAAmB,SAACC,GAC/B,IAAMC,EAA6C,SAAC3E,GAAK,OAAKb,EAACY,EAAU6E,EAAAA,EAAA,CAAA,EAAKF,GAAY1E,GAAS,EAEnG,OADA2E,EAAYE,YAAc,aACnBF,CACT"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o,Fragment as i,jsxs as t}from"react/jsx-runtime";import e from"@mui/icons-material/ArrowForward";import{Typography as n}from"@mui/material";import{ButtonOrange as d}from"../../components/buttons.js";import{NoDataPanel as r}from"../../components/no-data-panel.js";import{Header as s,HeaderLeft as u,Footer as v,Root as a,Body as m,Items as c}from"./styled.js";var p=function(p){var h=function(h){var f,b,y,g,x,C,P,j,k,M,S,T,w,I,R,W,z,F,L,N,_,A,B,H,q,D,E,G,J,K=null!==(f=h.carts)&&void 0!==f?f:[],O={carts:K,isMobile:h.isMobile,labels:l(l({},null!==(b=null==p?void 0:p.labels)&&void 0!==b?b:{}),null!==(y=null===(g=h.options)||void 0===g?void 0:g.labels)&&void 0!==y?y:{}),empty:l(l({},null!==(x=null==p?void 0:p.empty)&&void 0!==x?x:{}),null!==(C=null===(P=h.options)||void 0===P?void 0:P.empty)&&void 0!==C?C:{})},Q=function(l,o){return l?"function"==typeof l?l(O):l:o},U=o(r,{title:null===(j=O.empty)||void 0===j?void 0:j.title,subTitle:null===(k=O.empty)||void 0===k?void 0:k.subTitle,sx:{m:1,flex:1}}),V=o(i,{children:K.length>0?K.map(function(l,o){var i;return null!==(i=h.slots)&&void 0!==i&&i.item?h.slots.item(l,o,O):null}):null!==(M=Q(null===(S=h.slots)||void 0===S?void 0:S.empty,null))&&void 0!==M?M:U}),X=t(s,l(l({flexWrap:"wrap"},null===(T=h.slots)||void 0===T?void 0:T.headerProps),{},{children:[Q(null===(w=h.slots)||void 0===w?void 0:w.headerLeft,t(u,l(l({},null===(I=h.slots)||void 0===I?void 0:I.headerLeftProps),{},{children:[o(n,{variant:"h5",component:"h2",fontWeight:"bold",children:null===(R=O.labels)||void 0===R?void 0:R.title}),t(n,{variant:"body2",sx:{color:"var(--color-text-secondary)"},children:[null!==(W=K.length)&&void 0!==W?W:0," ",1===K.length?null===(z=O.labels)||void 0===z?void 0:z.itemsSuffixSingle:null===(F=O.labels)||void 0===F?void 0:F.itemsSuffixMany," in total"]})]}))),(null===(L=h.slots)||void 0===L?void 0:L.headerRight)&&Q(null===(N=h.slots)||void 0===N?void 0:N.headerRight,null)]})),Y=o(v,{children:o(d,l(l(l({variant:"contained",size:"medium",endIcon:o(e,{}),onClick:function(l){var o,i;null===(o=h.onClose)||void 0===o||o.call(h),null===(i=h.onCheckout)||void 0===i||i.call(h,l)},disabled:K.length<1,sx:{height:"42px",borderRadius:1,fontWeight:700,fontSize:"1rem",backgroundColor:"#e88c3f",textTransform:"none"}},h.buttonMoveToCartProps),h.buttonCheckoutProps),{},{children:(null===(_=h.buttonMoveToCartProps)||void 0===_?void 0:_.children)||(null===(A=h.buttonCheckoutProps)||void 0===A?void 0:A.children)||(null===(B=O.labels)||void 0===B?void 0:B.buttonCheckout)}))});return t(a,{className:h.isMobile?"mobile":"",children:[Q(null===(H=h.slots)||void 0===H?void 0:H.header,X),o(m,{children:t(c,{children:[Q(null===(q=h.slots)||void 0===q?void 0:q.beforeItems,null),null!==(D=Q(null===(E=h.slots)||void 0===E?void 0:E.items,V))&&void 0!==D?D:V,Q(null===(G=h.slots)||void 0===G?void 0:G.afterItems,null)]})}),Q(null===(J=h.slots)||void 0===J?void 0:J.footer,Y)]})};return h.displayName="FactoryCartContent",h};export{p as createCartContent,p as default};
1
+ import{objectSpread2 as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o,Fragment as i,jsxs as t}from"react/jsx-runtime";import e from"@mui/icons-material/ArrowForward";import{Typography as n}from"@mui/material";import{Header as d,HeaderLeft as r,Footer as s,Root as u,Body as v,Items as a}from"./styled.js";import{NoDataPanel as m}from"../../components/no-data-panel.js";import{ButtonOrange as c}from"../../components/buttons.js";var p=function(p){var h=function(h){var f,b,y,g,x,C,P,j,k,M,S,T,w,I,R,W,z,F,L,N,_,A,B,H,q,D,E,G,J,K=null!==(f=h.carts)&&void 0!==f?f:[],O={carts:K,isMobile:h.isMobile,labels:l(l({},null!==(b=null==p?void 0:p.labels)&&void 0!==b?b:{}),null!==(y=null===(g=h.options)||void 0===g?void 0:g.labels)&&void 0!==y?y:{}),empty:l(l({},null!==(x=null==p?void 0:p.empty)&&void 0!==x?x:{}),null!==(C=null===(P=h.options)||void 0===P?void 0:P.empty)&&void 0!==C?C:{})},Q=function(l,o){return l?"function"==typeof l?l(O):l:o},U=o(m,{title:null===(j=O.empty)||void 0===j?void 0:j.title,subTitle:null===(k=O.empty)||void 0===k?void 0:k.subTitle,sx:{m:1,flex:1}}),V=o(i,{children:K.length>0?K.map(function(l,o){var i;return null!==(i=h.slots)&&void 0!==i&&i.item?h.slots.item(l,o,O):null}):null!==(M=Q(null===(S=h.slots)||void 0===S?void 0:S.empty,null))&&void 0!==M?M:U}),X=t(d,l(l({flexWrap:"wrap"},null===(T=h.slots)||void 0===T?void 0:T.headerProps),{},{children:[Q(null===(w=h.slots)||void 0===w?void 0:w.headerLeft,t(r,l(l({},null===(I=h.slots)||void 0===I?void 0:I.headerLeftProps),{},{children:[o(n,{variant:"h5",component:"h2",fontWeight:"bold",children:null===(R=O.labels)||void 0===R?void 0:R.title}),t(n,{variant:"body2",sx:{color:"var(--color-text-secondary)"},children:[null!==(W=K.length)&&void 0!==W?W:0," ",1===K.length?null===(z=O.labels)||void 0===z?void 0:z.itemsSuffixSingle:null===(F=O.labels)||void 0===F?void 0:F.itemsSuffixMany," in total"]})]}))),(null===(L=h.slots)||void 0===L?void 0:L.headerRight)&&Q(null===(N=h.slots)||void 0===N?void 0:N.headerRight,null)]})),Y=o(s,{children:o(c,l(l(l({variant:"contained",size:"medium",endIcon:o(e,{}),onClick:function(l){var o,i;null===(o=h.onClose)||void 0===o||o.call(h),null===(i=h.onCheckout)||void 0===i||i.call(h,l)},disabled:K.length<1,sx:{height:"42px",borderRadius:1,fontWeight:700,fontSize:"1rem",backgroundColor:"#e88c3f",textTransform:"none"}},h.buttonMoveToCartProps),h.buttonCheckoutProps),{},{children:(null===(_=h.buttonMoveToCartProps)||void 0===_?void 0:_.children)||(null===(A=h.buttonCheckoutProps)||void 0===A?void 0:A.children)||(null===(B=O.labels)||void 0===B?void 0:B.buttonCheckout)}))});return t(u,{className:h.isMobile?"mobile":"",children:[Q(null===(H=h.slots)||void 0===H?void 0:H.header,X),o(v,{children:t(a,{children:[Q(null===(q=h.slots)||void 0===q?void 0:q.beforeItems,null),null!==(D=Q(null===(E=h.slots)||void 0===E?void 0:E.items,V))&&void 0!==D?D:V,Q(null===(G=h.slots)||void 0===G?void 0:G.afterItems,null)]})}),Q(null===(J=h.slots)||void 0===J?void 0:J.footer,Y)]})};return h.displayName="FactoryCartContent",h};export{p as createCartContent,p as default};
2
2
  //# sourceMappingURL=create.cart-content.js.map
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as t,jsxs as r}from"react/jsx-runtime";import{useMemo as e}from"react";import{Typography as l}from"@mui/material";import{ItemTitle as i,ItemRoot as n,ItemImg as a,ItemContent as s}from"./styled.js";import{IconButtonConfirm as u}from"../../components/buttons.js";import"../../components/no-data-panel.js";var m=function(m){var d=function(d){var p,c,v,f={item:d.item},b=e(function(){var o,t;return{slots:null!==(o=null!==(t=d.slots)&&void 0!==t?t:null==m?void 0:m.slots)&&void 0!==o?o:{}}},[]),g=function(o,t){return o?"function"==typeof o?o(f):o:t},x=t(i,{children:t(l,o(o({variant:"subtitle1",title:d.name},null!==(p=d.itemTitleProps)&&void 0!==p?p:d.itemTitlePropsGetter?d.itemTitlePropsGetter(d.item,d.onClose):{}),{},{children:d.name}))});return r(n,{children:[t(a,{src:d.imageUrl,fallbackSrc:"images/default-video.webp",alt:"product-picture"}),r(s,{children:[t(u,{size:"small",onAccept:function(){var o;return null===(o=d.onRemoveCart)||void 0===o?void 0:o.call(d,d.item)},slots:{sxLayout:{position:"absolute",left:0,top:0,flexDirection:"row-reverse",borderTopLeftRadius:"24px",borderBottomRightRadius:"16px",backgroundColor:"rgba(var(--color-bg-rgb), 0.7)"},removeProps:{sx:{color:"#dd5b5b"}}}}),g(null===(c=b.slots)||void 0===c?void 0:c.beforeTile,null),x,g(null===(v=b.slots)||void 0===v?void 0:v.afterTile,null)]})]})};return d.displayName="FactoryCartItem",d};export{m as createCartItem,m as default};
1
+ import{objectSpread2 as t}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o,jsxs as r}from"react/jsx-runtime";import{useMemo as e}from"react";import{Typography as l}from"@mui/material";import{ItemTitle as i,ItemRoot as n,ItemImg as a,ItemContent as s}from"./styled.js";import{IconButtonConfirm as u}from"../../components/buttons.js";var m=function(m){var d=function(d){var c,p,v,f={item:d.item},b=e(function(){var t,o;return{slots:null!==(t=null!==(o=d.slots)&&void 0!==o?o:null==m?void 0:m.slots)&&void 0!==t?t:{}}},[]),g=function(t,o){return t?"function"==typeof t?t(f):t:o},x=o(i,{children:o(l,t(t({variant:"subtitle1",title:d.name},null!==(c=d.itemTitleProps)&&void 0!==c?c:d.itemTitlePropsGetter?d.itemTitlePropsGetter(d.item,d.onClose):{}),{},{children:d.name}))});return r(n,{children:[o(a,{src:d.imageUrl,fallbackSrc:"images/default-video.webp",alt:"product-picture"}),r(s,{children:[o(u,{size:"small",onAccept:function(){var t;return null===(t=d.onRemoveCart)||void 0===t?void 0:t.call(d,d.item)},slots:{sxLayout:{position:"absolute",left:0,top:0,flexDirection:"row-reverse",borderTopLeftRadius:"24px",borderBottomRightRadius:"16px",backgroundColor:"rgba(var(--color-bg-rgb), 0.7)"},removeProps:{sx:{color:"#dd5b5b"}}}}),g(null===(p=b.slots)||void 0===p?void 0:p.beforeTile,null),x,g(null===(v=b.slots)||void 0===v?void 0:v.afterTile,null)]})]})};return d.displayName="FactoryCartItem",d};export{m as createCartItem,m as default};
2
2
  //# sourceMappingURL=create.cart-item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.cart-item.js","sources":["../../../src/factory/cart-item/create.cart-item.tsx"],"sourcesContent":["import { ComponentType, useMemo } from 'react'\r\nimport { Typography } from '@mui/material'\r\nimport { ItemContent, ItemImg, ItemRoot, ItemTitle } from './styled'\r\nimport IFactoryCartProps, { ICartContext, ICartOptions } from './types'\r\nimport { IconButtonConfirm } from '../../components'\r\n\r\nexport const createCartItem = <T = {},>(configs?: ICartOptions<T>): ComponentType<IFactoryCartProps<T>> => {\r\n const CartItem: ComponentType<IFactoryCartProps<T>> = (props) => {\r\n const viewContext: ICartContext<T> = { item: props.item }\r\n\r\n const initConfigs = useMemo(\r\n () => ({\r\n slots: props.slots ?? configs?.slots ?? {}\r\n }),\r\n []\r\n )\r\n\r\n const resolveSlot = (slot: any, defaultNode: React.ReactNode) => {\r\n if (!slot) return defaultNode\r\n if (typeof slot === 'function') return slot(viewContext)\r\n return slot\r\n }\r\n\r\n const titleNode = (\r\n <ItemTitle>\r\n <Typography\r\n variant='subtitle1'\r\n title={props.name}\r\n {...(props.itemTitleProps ?? (props.itemTitlePropsGetter ? props.itemTitlePropsGetter(props.item, props.onClose) : {}))}\r\n >\r\n {props.name}\r\n </Typography>\r\n </ItemTitle>\r\n )\r\n\r\n return (\r\n <ItemRoot>\r\n <ItemImg src={props.imageUrl} fallbackSrc='images/default-video.webp' alt='product-picture' />\r\n <ItemContent>\r\n <IconButtonConfirm\r\n size='small'\r\n onAccept={() => props.onRemoveCart?.(props.item)}\r\n slots={{\r\n sxLayout: {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n flexDirection: 'row-reverse',\r\n borderTopLeftRadius: '24px',\r\n borderBottomRightRadius: '16px',\r\n backgroundColor: 'rgba(var(--color-bg-rgb), 0.7)'\r\n },\r\n removeProps: { sx: { color: '#dd5b5b' } }\r\n }}\r\n />\r\n {resolveSlot(initConfigs.slots?.beforeTile, null)}\r\n {titleNode}\r\n {resolveSlot(initConfigs.slots?.afterTile, null)}\r\n </ItemContent>\r\n </ItemRoot>\r\n )\r\n }\r\n\r\n CartItem.displayName = 'FactoryCartItem'\r\n return CartItem\r\n}\r\n\r\nexport default createCartItem\r\n"],"names":["createCartItem","configs","CartItem","props","_props$itemTitleProps","_initConfigs$slots","_initConfigs$slots2","viewContext","item","initConfigs","useMemo","_ref","_props$slots","slots","resolveSlot","slot","defaultNode","titleNode","_jsx","ItemTitle","children","Typography","_objectSpread","variant","title","name","itemTitleProps","itemTitlePropsGetter","onClose","_jsxs","ItemRoot","ItemImg","src","imageUrl","fallbackSrc","alt","ItemContent","IconButtonConfirm","size","onAccept","_props$onRemoveCart","onRemoveCart","call","sxLayout","position","left","top","flexDirection","borderTopLeftRadius","borderBottomRightRadius","backgroundColor","removeProps","sx","color","beforeTile","afterTile","displayName"],"mappings":"2YAMaA,EAAiB,SAAUC,GACtC,IAAMC,EAAgD,SAACC,GAAS,IAAAC,EAAAC,EAAAC,EACxDC,EAA+B,CAAEC,KAAML,EAAMK,MAE7CC,EAAcC,EAClB,WAAA,IAAAC,EAAAC,EAAA,MAAO,CACLC,MAAoC,QAA/BF,EAAaC,QAAbA,EAAET,EAAMU,aAAKD,IAAAA,EAAAA,EAAIX,aAAO,EAAPA,EAASY,aAAK,IAAAF,EAAAA,EAAI,CAAA,EACxC,EACF,IAGIG,EAAc,SAACC,EAAWC,GAC9B,OAAKD,EACe,mBAATA,EAA4BA,EAAKR,GACrCQ,EAFWC,CAGnB,EAEKC,EACJC,EAACC,EACC,CAAAC,SAAAF,EAACG,EAAUC,EAAAA,EAAA,CACTC,QAAQ,YACRC,MAAOrB,EAAMsB,MACY,QADRrB,EACZD,EAAMuB,sBAAc,IAAAtB,EAAAA,EAAKD,EAAMwB,qBAAuBxB,EAAMwB,qBAAqBxB,EAAMK,KAAML,EAAMyB,SAAW,IAAE,GAAA,CAAER,SAEtHjB,EAAMsB,UAKb,OACEI,EAACC,EAAQ,CAAAV,SAAA,CACPF,EAACa,EAAO,CAACC,IAAK7B,EAAM8B,SAAUC,YAAY,4BAA4BC,IAAI,oBAC1EN,EAACO,aACClB,EAACmB,GACCC,KAAK,QACLC,SAAU,WAAF,IAAAC,EAAA,eAAAA,EAAQrC,EAAMsC,oBAAY,IAAAD,OAAA,EAAlBA,EAAAE,KAAAvC,EAAqBA,EAAMK,KAAK,EAChDK,MAAO,CACL8B,SAAU,CACRC,SAAU,WACVC,KAAM,EACNC,IAAK,EACLC,cAAe,cACfC,oBAAqB,OACrBC,wBAAyB,OACzBC,gBAAiB,kCAEnBC,YAAa,CAAEC,GAAI,CAAEC,MAAO,eAG/BvC,EAA6B,QAAlBT,EAACI,EAAYI,aAAZR,IAAiBA,OAAjBA,EAAAA,EAAmBiD,WAAY,MAC3CrC,EACAH,EAA6BR,QAAlBA,EAACG,EAAYI,iBAAKP,SAAjBA,EAAmBiD,UAAW,WAIlD,EAGD,OADArD,EAASsD,YAAc,kBAChBtD,CACT"}
1
+ {"version":3,"file":"create.cart-item.js","sources":["../../../src/factory/cart-item/create.cart-item.tsx"],"sourcesContent":["import { ComponentType, useMemo } from 'react'\r\nimport { Typography } from '@mui/material'\r\nimport { ItemContent, ItemImg, ItemRoot, ItemTitle } from './styled'\r\nimport IFactoryCartProps, { ICartContext, ICartOptions } from './types'\r\nimport { IconButtonConfirm } from '../../components'\r\n\r\nexport const createCartItem = <T = {},>(configs?: ICartOptions<T>): ComponentType<IFactoryCartProps<T>> => {\r\n const CartItem: ComponentType<IFactoryCartProps<T>> = (props) => {\r\n const viewContext: ICartContext<T> = { item: props.item }\r\n\r\n const initConfigs = useMemo(\r\n () => ({\r\n slots: props.slots ?? configs?.slots ?? {}\r\n }),\r\n []\r\n )\r\n\r\n const resolveSlot = (slot: any, defaultNode: React.ReactNode) => {\r\n if (!slot) return defaultNode\r\n if (typeof slot === 'function') return slot(viewContext)\r\n return slot\r\n }\r\n\r\n const titleNode = (\r\n <ItemTitle>\r\n <Typography\r\n variant='subtitle1'\r\n title={props.name}\r\n {...(props.itemTitleProps ?? (props.itemTitlePropsGetter ? props.itemTitlePropsGetter(props.item, props.onClose) : {}))}\r\n >\r\n {props.name}\r\n </Typography>\r\n </ItemTitle>\r\n )\r\n\r\n return (\r\n <ItemRoot>\r\n <ItemImg src={props.imageUrl} fallbackSrc='images/default-video.webp' alt='product-picture' />\r\n <ItemContent>\r\n <IconButtonConfirm\r\n size='small'\r\n onAccept={() => props.onRemoveCart?.(props.item)}\r\n slots={{\r\n sxLayout: {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n flexDirection: 'row-reverse',\r\n borderTopLeftRadius: '24px',\r\n borderBottomRightRadius: '16px',\r\n backgroundColor: 'rgba(var(--color-bg-rgb), 0.7)'\r\n },\r\n removeProps: { sx: { color: '#dd5b5b' } }\r\n }}\r\n />\r\n {resolveSlot(initConfigs.slots?.beforeTile, null)}\r\n {titleNode}\r\n {resolveSlot(initConfigs.slots?.afterTile, null)}\r\n </ItemContent>\r\n </ItemRoot>\r\n )\r\n }\r\n\r\n CartItem.displayName = 'FactoryCartItem'\r\n return CartItem\r\n}\r\n\r\nexport default createCartItem\r\n"],"names":["createCartItem","configs","CartItem","props","_props$itemTitleProps","_initConfigs$slots","_initConfigs$slots2","viewContext","item","initConfigs","useMemo","_ref","_props$slots","slots","resolveSlot","slot","defaultNode","titleNode","_jsx","ItemTitle","children","Typography","_objectSpread","variant","title","name","itemTitleProps","itemTitlePropsGetter","onClose","_jsxs","ItemRoot","ItemImg","src","imageUrl","fallbackSrc","alt","ItemContent","IconButtonConfirm","size","onAccept","_props$onRemoveCart","onRemoveCart","call","sxLayout","position","left","top","flexDirection","borderTopLeftRadius","borderBottomRightRadius","backgroundColor","removeProps","sx","color","beforeTile","afterTile","displayName"],"mappings":"iWAMaA,EAAiB,SAAUC,GACtC,IAAMC,EAAgD,SAACC,GAAS,IAAAC,EAAAC,EAAAC,EACxDC,EAA+B,CAAEC,KAAML,EAAMK,MAE7CC,EAAcC,EAClB,WAAA,IAAAC,EAAAC,EAAA,MAAO,CACLC,MAAoC,QAA/BF,EAAaC,QAAbA,EAAET,EAAMU,aAAKD,IAAAA,EAAAA,EAAIX,aAAO,EAAPA,EAASY,aAAK,IAAAF,EAAAA,EAAI,CAAA,EACxC,EACF,IAGIG,EAAc,SAACC,EAAWC,GAC9B,OAAKD,EACe,mBAATA,EAA4BA,EAAKR,GACrCQ,EAFWC,CAGnB,EAEKC,EACJC,EAACC,EACC,CAAAC,SAAAF,EAACG,EAAUC,EAAAA,EAAA,CACTC,QAAQ,YACRC,MAAOrB,EAAMsB,MACY,QADRrB,EACZD,EAAMuB,sBAAc,IAAAtB,EAAAA,EAAKD,EAAMwB,qBAAuBxB,EAAMwB,qBAAqBxB,EAAMK,KAAML,EAAMyB,SAAW,IAAE,GAAA,CAAER,SAEtHjB,EAAMsB,UAKb,OACEI,EAACC,EAAQ,CAAAV,SAAA,CACPF,EAACa,EAAO,CAACC,IAAK7B,EAAM8B,SAAUC,YAAY,4BAA4BC,IAAI,oBAC1EN,EAACO,aACClB,EAACmB,GACCC,KAAK,QACLC,SAAU,WAAF,IAAAC,EAAA,eAAAA,EAAQrC,EAAMsC,oBAAY,IAAAD,OAAA,EAAlBA,EAAAE,KAAAvC,EAAqBA,EAAMK,KAAK,EAChDK,MAAO,CACL8B,SAAU,CACRC,SAAU,WACVC,KAAM,EACNC,IAAK,EACLC,cAAe,cACfC,oBAAqB,OACrBC,wBAAyB,OACzBC,gBAAiB,kCAEnBC,YAAa,CAAEC,GAAI,CAAEC,MAAO,eAG/BvC,EAA6B,QAAlBT,EAACI,EAAYI,aAAZR,IAAiBA,OAAjBA,EAAAA,EAAmBiD,WAAY,MAC3CrC,EACAH,EAA6BR,QAAlBA,EAACG,EAAYI,iBAAKP,SAAjBA,EAAmBiD,UAAW,WAIlD,EAGD,OADArD,EAASsD,YAAc,kBAChBtD,CACT"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as e}from"react/jsx-runtime";import r from"@mui/material/IconButton";import i from"@mui/material/Slider";import l from"@mui/icons-material/VolumeOff";import a from"@mui/icons-material/VolumeUp";var n=function(n){var m=n.hidden,c=n.sliderPosition,s=void 0===c?"above":c,u=n.sliderHeight,f=void 0===u?60:u,p=n.sliderWidth,d=void 0===p?4:p,v=n.orientation,h=void 0===v?"vertical":v,b=n.volume,x=n.muted,g=n.setVolume,y=n.toggleMute,w={};return"above"===s?w={position:"absolute",left:"50%",bottom:"calc(100%)",transform:"translateX(-50%)",height:f,width:d}:"right"===s?w={opacity:1,height:d,width:f}:"below"===s&&(w={position:"absolute",left:"50%",top:"calc(100% + 8px)",transform:"translateX(-50%)",height:f,width:d}),m?null:t("div",{style:{position:"relative",display:"flex",alignItems:"center",justifyContent:"center"},className:"volume-slider-wrapper",children:[e(r,{size:"small",onClick:function(){return y()},children:e(x?l:a,{fontSize:"small",sx:{color:"var(--mp-core1-color-text, #fff)"}})}),e(i,{orientation:h,min:0,max:1,step:.01,value:x?0:b,onChange:function(o,t){return g(Number(t))},sx:o(o({opacity:0},w),{},{color:"var(--mp-core1-color-text, #fff)",pointerEvents:"none",transition:"opacity 0.2s","& .MuiSlider-thumb":{display:"none",width:12,height:12,backgroundColor:"var(--mp-core1-color-text, #fff)",border:"2px solid var(--mp-core1-color-text, #fff)"},"&:hover .MuiSlider-thumb":{display:"block","&::after":{content:"unset"}},".volume-slider-wrapper:hover &":{opacity:1,pointerEvents:"auto"},"& .MuiSlider-rail":{color:"var(--mp-core1-color-text, #fff)",opacity:.3},"& .MuiSlider-track":{color:"var(--mp-core1-color-text, #fff)"}})})]})};export{n as default};
1
+ import{objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as e}from"react/jsx-runtime";import r from"@mui/material/IconButton";import i from"@mui/material/Slider";import l from"@mui/icons-material/VolumeOff";import a from"@mui/icons-material/VolumeUp";var n=function(n){var m=n.sliderPosition,c=void 0===m?"above":m,s=n.sliderHeight,u=void 0===s?60:s,f=n.sliderWidth,p=void 0===f?4:f,d=n.orientation,v=void 0===d?"vertical":d,h=n.volume,b=n.muted,x=n.setVolume,g=n.toggleMute;if(1==n.hidden)return null;var y={};return"above"===c?y={position:"absolute",left:"50%",bottom:"calc(100%)",transform:"translateX(-50%)",height:u,width:p}:"right"===c?y={opacity:1,height:p,width:u}:"below"===c&&(y={position:"absolute",left:"50%",top:"calc(100% + 8px)",transform:"translateX(-50%)",height:u,width:p}),t("div",{style:{position:"relative",display:"flex",alignItems:"center",justifyContent:"center"},className:"volume-slider-wrapper",children:[e(r,{size:"small",onClick:function(){return g()},children:e(b?l:a,{fontSize:"small",sx:{color:"var(--mp-core1-color-text, #fff)"}})}),e(i,{orientation:v,min:0,max:1,step:.01,value:b?0:h,onChange:function(o,t){return x(Number(t))},sx:o(o({opacity:0},y),{},{color:"var(--mp-core1-color-text, #fff)",pointerEvents:"none",transition:"opacity 0.2s","& .MuiSlider-thumb":{display:"none",width:12,height:12,backgroundColor:"var(--mp-core1-color-text, #fff)",border:"2px solid var(--mp-core1-color-text, #fff)"},"&:hover .MuiSlider-thumb":{display:"block","&::after":{content:"unset"}},".volume-slider-wrapper:hover &":{opacity:1,pointerEvents:"auto"},"& .MuiSlider-rail":{color:"var(--mp-core1-color-text, #fff)",opacity:.3},"& .MuiSlider-track":{color:"var(--mp-core1-color-text, #fff)"}})})]})};export{n as default};
2
2
  //# sourceMappingURL=btn.volume.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"btn.volume.js","sources":["../../../src/media-player/core/btn.volume.tsx"],"sourcesContent":["import IconButton from '@mui/material/IconButton'\r\nimport Slider from '@mui/material/Slider'\r\nimport VolumeOffIcon from '@mui/icons-material/VolumeOff'\r\nimport VolumeUpIcon from '@mui/icons-material/VolumeUp'\r\n\r\ntype MediaControlProps = {\r\n hidden?: boolean\r\n sliderPosition?: 'above' | 'right' | 'below'\r\n orientation?: 'horizontal' | 'vertical'\r\n sliderHeight?: number\r\n sliderWidth?: number\r\n volume?: number\r\n muted?: boolean\r\n setVolume: (value: number) => void\r\n toggleMute: () => void\r\n}\r\n\r\nconst BtnVolume: React.FC<MediaControlProps> = ({\r\n hidden,\r\n sliderPosition = 'above',\r\n sliderHeight = 60,\r\n sliderWidth = 4,\r\n orientation = 'vertical',\r\n volume,\r\n muted,\r\n setVolume,\r\n toggleMute\r\n}) => {\r\n const IconComp = muted ? VolumeOffIcon : VolumeUpIcon\r\n // Xác định style cho slider dựa vào vị trí\r\n let sliderStyle: React.CSSProperties = {}\r\n if (sliderPosition === 'above') {\r\n sliderStyle = {\r\n position: 'absolute',\r\n left: '50%',\r\n bottom: 'calc(100%)',\r\n transform: 'translateX(-50%)',\r\n height: sliderHeight,\r\n width: sliderWidth\r\n }\r\n } else if (sliderPosition === 'right') {\r\n sliderStyle = {\r\n opacity: 1,\r\n height: sliderWidth,\r\n width: sliderHeight\r\n }\r\n } else if (sliderPosition === 'below') {\r\n sliderStyle = {\r\n position: 'absolute',\r\n left: '50%',\r\n top: 'calc(100% + 8px)',\r\n transform: 'translateX(-50%)',\r\n height: sliderHeight,\r\n width: sliderWidth\r\n }\r\n }\r\n if (hidden) return null\r\n return (\r\n <div\r\n style={{\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}\r\n className='volume-slider-wrapper'\r\n >\r\n <IconButton size='small' onClick={() => toggleMute()}>\r\n <IconComp fontSize='small' sx={{ color: 'var(--mp-core1-color-text, #fff)' }} />\r\n </IconButton>\r\n <Slider\r\n orientation={orientation}\r\n min={0}\r\n max={1}\r\n step={0.01}\r\n value={muted ? 0 : volume}\r\n onChange={(_, value) => setVolume(Number(value))}\r\n sx={{\r\n opacity: 0,\r\n ...sliderStyle,\r\n color: 'var(--mp-core1-color-text, #fff)',\r\n pointerEvents: 'none',\r\n transition: 'opacity 0.2s',\r\n '& .MuiSlider-thumb': {\r\n display: 'none',\r\n width: 12,\r\n height: 12,\r\n backgroundColor: 'var(--mp-core1-color-text, #fff)',\r\n border: `2px solid var(--mp-core1-color-text, #fff)`\r\n },\r\n '&:hover .MuiSlider-thumb': {\r\n display: 'block',\r\n '&::after': {\r\n content: 'unset'\r\n }\r\n },\r\n '.volume-slider-wrapper:hover &': {\r\n opacity: 1,\r\n pointerEvents: 'auto'\r\n },\r\n '& .MuiSlider-rail': {\r\n color: 'var(--mp-core1-color-text, #fff)',\r\n opacity: 0.3\r\n },\r\n '& .MuiSlider-track': {\r\n color: 'var(--mp-core1-color-text, #fff)'\r\n }\r\n }}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default BtnVolume\r\n"],"names":["BtnVolume","_ref","hidden","_ref$sliderPosition","sliderPosition","_ref$sliderHeight","sliderHeight","_ref$sliderWidth","sliderWidth","_ref$orientation","orientation","volume","muted","setVolume","toggleMute","sliderStyle","position","left","bottom","transform","height","width","opacity","top","_jsxs","style","display","alignItems","justifyContent","className","_jsx","IconButton","size","onClick","children","VolumeOffIcon","VolumeUpIcon","fontSize","sx","color","Slider","min","max","step","value","onChange","_","Number","_objectSpread","pointerEvents","transition","backgroundColor","border","content"],"mappings":"mSAiBA,IAAMA,EAAyC,SAAhCC,GAUV,IATHC,EAAMD,EAANC,OAAMC,EAAAF,EACNG,eAAAA,OAAiB,IAAHD,EAAG,QAAOA,EAAAE,EAAAJ,EACxBK,aAAAA,OAAe,IAAHD,EAAG,GAAEA,EAAAE,EAAAN,EACjBO,YAAAA,OAAc,IAAHD,EAAG,EAACA,EAAAE,EAAAR,EACfS,YAAAA,OAAc,IAAHD,EAAG,WAAUA,EACxBE,EAAMV,EAANU,OACAC,EAAKX,EAALW,MACAC,EAASZ,EAATY,UACAC,EAAUb,EAAVa,WAIIC,EAAmC,CAAE,EA0BzC,MAzBuB,UAAnBX,EACFW,EAAc,CACZC,SAAU,WACVC,KAAM,MACNC,OAAQ,aACRC,UAAW,mBACXC,OAAQd,EACRe,MAAOb,GAEmB,UAAnBJ,EACTW,EAAc,CACZO,QAAS,EACTF,OAAQZ,EACRa,MAAOf,GAEmB,UAAnBF,IACTW,EAAc,CACZC,SAAU,WACVC,KAAM,MACNM,IAAK,mBACLJ,UAAW,mBACXC,OAAQd,EACRe,MAAOb,IAGPN,EAAe,KAEjBsB,EACE,MAAA,CAAAC,MAAO,CACLT,SAAU,WACVU,QAAS,OACTC,WAAY,SACZC,eAAgB,UAElBC,UAAU,kCAEVC,EAACC,GAAWC,KAAK,QAAQC,QAAS,WAAF,OAAQnB,GAAY,EAClDoB,SAAAJ,EAxCWlB,EAAQuB,EAAgBC,EAwC1B,CAACC,SAAS,QAAQC,GAAI,CAAEC,MAAO,wCAE1CT,EAACU,EAAM,CACL9B,YAAaA,EACb+B,IAAK,EACLC,IAAK,EACLC,KAAM,IACNC,MAAOhC,EAAQ,EAAID,EACnBkC,SAAU,SAACC,EAAGF,GAAK,OAAK/B,EAAUkC,OAAOH,GAAO,EAChDN,GAAEU,EAAAA,EAAA,CACA1B,QAAS,GACNP,GAAW,GAAA,CACdwB,MAAO,mCACPU,cAAe,OACfC,WAAY,eACZ,qBAAsB,CACpBxB,QAAS,OACTL,MAAO,GACPD,OAAQ,GACR+B,gBAAiB,mCACjBC,OAAM,8CAER,2BAA4B,CAC1B1B,QAAS,QACT,WAAY,CACV2B,QAAS,UAGb,iCAAkC,CAChC/B,QAAS,EACT2B,cAAe,QAEjB,oBAAqB,CACnBV,MAAO,mCACPjB,QAAS,IAEX,qBAAsB,CACpBiB,MAAO,0CAMnB"}
1
+ {"version":3,"file":"btn.volume.js","sources":["../../../src/media-player/core/btn.volume.tsx"],"sourcesContent":["import IconButton from '@mui/material/IconButton'\r\nimport Slider from '@mui/material/Slider'\r\nimport VolumeOffIcon from '@mui/icons-material/VolumeOff'\r\nimport VolumeUpIcon from '@mui/icons-material/VolumeUp'\r\n\r\ntype MediaControlProps = {\r\n hidden?: boolean\r\n sliderPosition?: 'above' | 'right' | 'below'\r\n orientation?: 'horizontal' | 'vertical'\r\n sliderHeight?: number\r\n sliderWidth?: number\r\n volume?: number\r\n muted?: boolean\r\n setVolume: (value: number) => void\r\n toggleMute: () => void\r\n}\r\n\r\nconst BtnVolume: React.FC<MediaControlProps> = (props) => {\r\n const { sliderPosition = 'above', sliderHeight = 60, sliderWidth = 4, orientation = 'vertical', volume, muted } = props\r\n const { setVolume, toggleMute } = props\r\n\r\n if (props.hidden == true) return null\r\n\r\n const IconComp = muted ? VolumeOffIcon : VolumeUpIcon\r\n // Xác định style cho slider dựa vào vị trí\r\n let sliderStyle: React.CSSProperties = {}\r\n if (sliderPosition === 'above') {\r\n sliderStyle = {\r\n position: 'absolute',\r\n left: '50%',\r\n bottom: 'calc(100%)',\r\n transform: 'translateX(-50%)',\r\n height: sliderHeight,\r\n width: sliderWidth\r\n }\r\n } else if (sliderPosition === 'right') {\r\n sliderStyle = {\r\n opacity: 1,\r\n height: sliderWidth,\r\n width: sliderHeight\r\n }\r\n } else if (sliderPosition === 'below') {\r\n sliderStyle = {\r\n position: 'absolute',\r\n left: '50%',\r\n top: 'calc(100% + 8px)',\r\n transform: 'translateX(-50%)',\r\n height: sliderHeight,\r\n width: sliderWidth\r\n }\r\n }\r\n return (\r\n <div\r\n style={{\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}\r\n className='volume-slider-wrapper'\r\n >\r\n <IconButton size='small' onClick={() => toggleMute()}>\r\n <IconComp fontSize='small' sx={{ color: 'var(--mp-core1-color-text, #fff)' }} />\r\n </IconButton>\r\n <Slider\r\n orientation={orientation}\r\n min={0}\r\n max={1}\r\n step={0.01}\r\n value={muted ? 0 : volume}\r\n onChange={(_, value) => setVolume(Number(value))}\r\n sx={{\r\n opacity: 0,\r\n ...sliderStyle,\r\n color: 'var(--mp-core1-color-text, #fff)',\r\n pointerEvents: 'none',\r\n transition: 'opacity 0.2s',\r\n '& .MuiSlider-thumb': {\r\n display: 'none',\r\n width: 12,\r\n height: 12,\r\n backgroundColor: 'var(--mp-core1-color-text, #fff)',\r\n border: `2px solid var(--mp-core1-color-text, #fff)`\r\n },\r\n '&:hover .MuiSlider-thumb': {\r\n display: 'block',\r\n '&::after': {\r\n content: 'unset'\r\n }\r\n },\r\n '.volume-slider-wrapper:hover &': {\r\n opacity: 1,\r\n pointerEvents: 'auto'\r\n },\r\n '& .MuiSlider-rail': {\r\n color: 'var(--mp-core1-color-text, #fff)',\r\n opacity: 0.3\r\n },\r\n '& .MuiSlider-track': {\r\n color: 'var(--mp-core1-color-text, #fff)'\r\n }\r\n }}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nexport default BtnVolume\r\n"],"names":["BtnVolume","props","_props$sliderPosition","sliderPosition","_props$sliderHeight","sliderHeight","_props$sliderWidth","sliderWidth","_props$orientation","orientation","volume","muted","setVolume","toggleMute","hidden","sliderStyle","position","left","bottom","transform","height","width","opacity","top","_jsxs","style","display","alignItems","justifyContent","className","_jsx","IconButton","size","onClick","children","VolumeOffIcon","VolumeUpIcon","fontSize","sx","color","Slider","min","max","step","value","onChange","_","Number","_objectSpread","pointerEvents","transition","backgroundColor","border","content"],"mappings":"mSAiBA,IAAMA,EAAyC,SAACC,GAC9C,IAAAC,EAAkHD,EAA1GE,eAAAA,OAAiB,IAAHD,EAAG,QAAOA,EAAAE,EAAkFH,EAAhFI,aAAAA,OAAe,IAAHD,EAAG,GAAEA,EAAAE,EAA+DL,EAA7DM,YAAAA,OAAc,IAAHD,EAAG,EAACA,EAAAE,EAA8CP,EAA5CQ,YAAAA,OAAc,IAAHD,EAAG,WAAUA,EAAEE,EAAkBT,EAAlBS,OAAQC,EAAUV,EAAVU,MAChGC,EAA0BX,EAA1BW,UAAWC,EAAeZ,EAAfY,WAEnB,GAAoB,GAAhBZ,EAAMa,OAAgB,OAAO,KAEjC,IAEIC,EAAmC,CAAE,EA0BzC,MAzBuB,UAAnBZ,EACFY,EAAc,CACZC,SAAU,WACVC,KAAM,MACNC,OAAQ,aACRC,UAAW,mBACXC,OAAQf,EACRgB,MAAOd,GAEmB,UAAnBJ,EACTY,EAAc,CACZO,QAAS,EACTF,OAAQb,EACRc,MAAOhB,GAEmB,UAAnBF,IACTY,EAAc,CACZC,SAAU,WACVC,KAAM,MACNM,IAAK,mBACLJ,UAAW,mBACXC,OAAQf,EACRgB,MAAOd,IAITiB,EACE,MAAA,CAAAC,MAAO,CACLT,SAAU,WACVU,QAAS,OACTC,WAAY,SACZC,eAAgB,UAElBC,UAAU,kCAEVC,EAACC,GAAWC,KAAK,QAAQC,QAAS,WAAF,OAAQpB,GAAY,EAClDqB,SAAAJ,EAvCWnB,EAAQwB,EAAgBC,EAuC1B,CAACC,SAAS,QAAQC,GAAI,CAAEC,MAAO,wCAE1CT,EAACU,EAAM,CACL/B,YAAaA,EACbgC,IAAK,EACLC,IAAK,EACLC,KAAM,IACNC,MAAOjC,EAAQ,EAAID,EACnBmC,SAAU,SAACC,EAAGF,GAAK,OAAKhC,EAAUmC,OAAOH,GAAO,EAChDN,GAAEU,EAAAA,EAAA,CACA1B,QAAS,GACNP,GAAW,GAAA,CACdwB,MAAO,mCACPU,cAAe,OACfC,WAAY,eACZ,qBAAsB,CACpBxB,QAAS,OACTL,MAAO,GACPD,OAAQ,GACR+B,gBAAiB,mCACjBC,OAAM,8CAER,2BAA4B,CAC1B1B,QAAS,QACT,WAAY,CACV2B,QAAS,UAGb,iCAAkC,CAChC/B,QAAS,EACT2B,cAAe,QAEjB,oBAAqB,CACnBV,MAAO,mCACPjB,QAAS,IAEX,qBAAsB,CACpBiB,MAAO,0CAMnB"}
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Box as t,Slider as o}from"@mui/material";var i=function(i){var n=i.bufferedSegments,a=i.progress,l=i.isLoading,d=i.onChange;return r(t,{sx:{position:"relative",width:"100%",display:"flex",alignItems:"center"},children:[n.map(function(r,o){return e(t,{sx:{position:"absolute",top:"50%",transform:"translateY(-50%)",left:"".concat(r.left,"%"),width:"".concat(r.width,"%"),height:5,backgroundColor:"rgba(255,255,255,0.4)",pointerEvents:"none",borderRadius:2,zIndex:1}},o)}),l&&e(t,{sx:{position:"absolute",top:"50%",transform:"translateY(-50%)",left:0,height:5,width:"100%",backgroundImage:"repeating-linear-gradient(\n 30deg,\n rgba(255,255,255,0.2) 0px,\n rgba(255,255,255,0.2) 6px,\n rgba(255,255,255,0.08) 6px,\n rgba(255,255,255,0.08) 12px\n )",filter:"blur(0.5px)",backgroundSize:"48px 48px",animation:"stripeAnimation 4s linear infinite",pointerEvents:"none",overflow:"hidden",borderRadius:2,zIndex:2}}),e(o,{value:a,min:0,max:100,step:.1,onChange:function(r,e){return null==d?void 0:d(Number(e))},sx:{position:"absolute",top:"50%",left:0,width:"100%",transform:"translateY(-50%)",height:5,color:"var(--mp-core1-color-main, #ed4229)",zIndex:3,padding:0,"& .MuiSlider-thumb":{display:"none",width:12,height:12,backgroundColor:"var(--mp-core1-color-text, #fff)",border:"2px solid var(--mp-core1-color-text, #fff)"},"&:hover .MuiSlider-thumb":{display:"block"},"& .MuiSlider-rail":{color:"var(--mp-core1-color-text, #fff)",opacity:.3},"& .MuiSlider-track":{borderRadius:2}}})]})};export{i as default};
1
+ import{jsxs as r,jsx as e}from"react/jsx-runtime";import{Box as t,Slider as o}from"@mui/material";var n=function(n){var i=n.bufferedSegments,a=n.progress,l=n.isLoading,d=n.hidden,s=n.onChange;return 1==d?null:r(t,{sx:{position:"relative",width:"100%",display:"flex",alignItems:"center"},children:[i.map(function(r,o){return e(t,{sx:{position:"absolute",top:"50%",transform:"translateY(-50%)",left:"".concat(r.left,"%"),width:"".concat(r.width,"%"),height:5,backgroundColor:"rgba(255,255,255,0.4)",pointerEvents:"none",borderRadius:2,zIndex:1}},o)}),l&&e(t,{sx:{position:"absolute",top:"50%",transform:"translateY(-50%)",left:0,height:5,width:"100%",backgroundImage:"repeating-linear-gradient(\n 30deg,\n rgba(255,255,255,0.2) 0px,\n rgba(255,255,255,0.2) 6px,\n rgba(255,255,255,0.08) 6px,\n rgba(255,255,255,0.08) 12px\n )",filter:"blur(0.5px)",backgroundSize:"48px 48px",animation:"stripeAnimation 4s linear infinite",pointerEvents:"none",overflow:"hidden",borderRadius:2,zIndex:2}}),e(o,{value:a,min:0,max:100,step:.1,onChange:function(r,e){return null==s?void 0:s(Number(e))},sx:{position:"absolute",top:"50%",left:0,width:"100%",transform:"translateY(-50%)",height:5,color:"var(--mp-core1-color-main, #ed4229)",zIndex:3,padding:0,"& .MuiSlider-thumb":{display:"none",width:12,height:12,backgroundColor:"var(--mp-core1-color-text, #fff)",border:"2px solid var(--mp-core1-color-text, #fff)"},"&:hover .MuiSlider-thumb":{display:"block"},"& .MuiSlider-rail":{color:"var(--mp-core1-color-text, #fff)",opacity:.3},"& .MuiSlider-track":{borderRadius:2}}})]})};export{n as default};
2
2
  //# sourceMappingURL=progressBar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progressBar.js","sources":["../../../src/media-player/core/progressBar.tsx"],"sourcesContent":["import React from 'react'\r\nimport { Slider, Box } from '@mui/material'\r\n\r\ninterface Props {\r\n bufferedSegments: { left: number; width: number }[]\r\n progress: number\r\n isLoading: boolean\r\n onChange?: (value: number) => void\r\n}\r\n\r\nconst ProgressBar: React.FC<Props> = ({\r\n bufferedSegments,\r\n progress,\r\n isLoading,\r\n onChange,\r\n}) => (\r\n <Box sx={{ position: 'relative', width: '100%', display: 'flex', alignItems: 'center' }}>\r\n {bufferedSegments.map((seg, idx) => (\r\n <Box\r\n key={idx}\r\n sx={{\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n left: `${seg.left}%`,\r\n width: `${seg.width}%`,\r\n height: 5,\r\n backgroundColor: 'rgba(255,255,255,0.4)',\r\n pointerEvents: 'none',\r\n borderRadius: 2,\r\n zIndex: 1\r\n }}\r\n />\r\n ))}\r\n {/* Loading stripe */}\r\n {isLoading && (\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n left: 0,\r\n height: 5,\r\n width: '100%',\r\n backgroundImage: `repeating-linear-gradient(\r\n 30deg,\r\n rgba(255,255,255,0.2) 0px,\r\n rgba(255,255,255,0.2) 6px,\r\n rgba(255,255,255,0.08) 6px,\r\n rgba(255,255,255,0.08) 12px\r\n )`,\r\n filter: 'blur(0.5px)',\r\n backgroundSize: '48px 48px',\r\n animation: 'stripeAnimation 4s linear infinite',\r\n pointerEvents: 'none',\r\n overflow: 'hidden',\r\n borderRadius: 2,\r\n zIndex: 2\r\n }}\r\n />\r\n )}\r\n {/* Slider */}\r\n <Slider\r\n value={progress}\r\n min={0}\r\n max={100}\r\n step={0.1}\r\n onChange={(_, value) => onChange?.(Number(value))}\r\n sx={{\r\n position: 'absolute',\r\n top: '50%',\r\n left: 0,\r\n width: '100%',\r\n transform: 'translateY(-50%)',\r\n height: 5,\r\n color: 'var(--mp-core1-color-main, #ed4229)',\r\n zIndex: 3,\r\n padding: 0,\r\n '& .MuiSlider-thumb': {\r\n display: 'none',\r\n width: 12,\r\n height: 12,\r\n backgroundColor: 'var(--mp-core1-color-text, #fff)',\r\n border: `2px solid var(--mp-core1-color-text, #fff)`\r\n },\r\n '&:hover .MuiSlider-thumb': {\r\n display: 'block'\r\n },\r\n '& .MuiSlider-rail': {\r\n color: 'var(--mp-core1-color-text, #fff)',\r\n opacity: 0.3\r\n },\r\n '& .MuiSlider-track': {\r\n borderRadius: 2\r\n }\r\n }}\r\n />\r\n </Box>\r\n)\r\n\r\nexport default ProgressBar\r\n"],"names":["ProgressBar","_ref","bufferedSegments","progress","isLoading","onChange","_jsxs","Box","sx","position","width","display","alignItems","children","map","seg","idx","_jsx","top","transform","left","concat","height","backgroundColor","pointerEvents","borderRadius","zIndex","backgroundImage","filter","backgroundSize","animation","overflow","Slider","value","min","max","step","_","Number","color","padding","border","opacity"],"mappings":"kGAUA,IAAMA,EAA+B,SAApBC,GAAA,IACfC,EAAgBD,EAAhBC,iBACAC,EAAQF,EAARE,SACAC,EAASH,EAATG,UACAC,EAAQJ,EAARI,SAAQ,OAERC,EAACC,EAAG,CAACC,GAAI,CAAEC,SAAU,WAAYC,MAAO,OAAQC,QAAS,OAAQC,WAAY,UAC1EC,SAAA,CAAAX,EAAiBY,IAAI,SAACC,EAAKC,GAAG,OAC7BC,EAACV,EAEC,CAAAC,GAAI,CACFC,SAAU,WACVS,IAAK,MACLC,UAAW,mBACXC,QAAIC,OAAKN,EAAIK,KAAO,KACpBV,SAAKW,OAAKN,EAAIL,MAAQ,KACtBY,OAAQ,EACRC,gBAAiB,wBACjBC,cAAe,OACfC,aAAc,EACdC,OAAQ,IAXLV,EAaL,GAGHZ,GACCa,EAACV,EACC,CAAAC,GAAI,CACFC,SAAU,WACVS,IAAK,MACLC,UAAW,mBACXC,KAAM,EACNE,OAAQ,EACRZ,MAAO,OACPiB,gBAME,gOACFC,OAAQ,cACRC,eAAgB,YAChBC,UAAW,qCACXN,cAAe,OACfO,SAAU,SACVN,aAAc,EACdC,OAAQ,KAKdT,EAACe,EACC,CAAAC,MAAO9B,EACP+B,IAAK,EACLC,IAAK,IACLC,KAAM,GACN/B,SAAU,SAACgC,EAAGJ,GAAK,OAAK5B,aAAAA,EAAAA,EAAWiC,OAAOL,GAAO,EACjDzB,GAAI,CACFC,SAAU,WACVS,IAAK,MACLE,KAAM,EACNV,MAAO,OACPS,UAAW,mBACXG,OAAQ,EACRiB,MAAO,sCACPb,OAAQ,EACRc,QAAS,EACT,qBAAsB,CACpB7B,QAAS,OACTD,MAAO,GACPY,OAAQ,GACRC,gBAAiB,mCACjBkB,OAAM,8CAER,2BAA4B,CAC1B9B,QAAS,SAEX,oBAAqB,CACnB4B,MAAO,mCACPG,QAAS,IAEX,qBAAsB,CACpBjB,aAAc,QAIhB"}
1
+ {"version":3,"file":"progressBar.js","sources":["../../../src/media-player/core/progressBar.tsx"],"sourcesContent":["import React from 'react'\r\nimport { Slider, Box } from '@mui/material'\r\n\r\ninterface IProgressBarProps {\r\n bufferedSegments: { left: number; width: number }[]\r\n progress: number\r\n isLoading: boolean\r\n hidden?: boolean\r\n onChange?: (value: number) => void\r\n}\r\n\r\nconst ProgressBar: React.FC<IProgressBarProps> = (props) => {\r\n const { bufferedSegments, progress, isLoading, hidden, onChange } = props\r\n if (hidden == true) return null\r\n return (\r\n <Box sx={{ position: 'relative', width: '100%', display: 'flex', alignItems: 'center' }}>\r\n {bufferedSegments.map((seg, idx) => (\r\n <Box\r\n key={idx}\r\n sx={{\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n left: `${seg.left}%`,\r\n width: `${seg.width}%`,\r\n height: 5,\r\n backgroundColor: 'rgba(255,255,255,0.4)',\r\n pointerEvents: 'none',\r\n borderRadius: 2,\r\n zIndex: 1\r\n }}\r\n />\r\n ))}\r\n {/* Loading stripe */}\r\n {isLoading && (\r\n <Box\r\n sx={{\r\n position: 'absolute',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n left: 0,\r\n height: 5,\r\n width: '100%',\r\n backgroundImage: `repeating-linear-gradient(\r\n 30deg,\r\n rgba(255,255,255,0.2) 0px,\r\n rgba(255,255,255,0.2) 6px,\r\n rgba(255,255,255,0.08) 6px,\r\n rgba(255,255,255,0.08) 12px\r\n )`,\r\n filter: 'blur(0.5px)',\r\n backgroundSize: '48px 48px',\r\n animation: 'stripeAnimation 4s linear infinite',\r\n pointerEvents: 'none',\r\n overflow: 'hidden',\r\n borderRadius: 2,\r\n zIndex: 2\r\n }}\r\n />\r\n )}\r\n {/* Slider */}\r\n <Slider\r\n value={progress}\r\n min={0}\r\n max={100}\r\n step={0.1}\r\n onChange={(_, value) => onChange?.(Number(value))}\r\n sx={{\r\n position: 'absolute',\r\n top: '50%',\r\n left: 0,\r\n width: '100%',\r\n transform: 'translateY(-50%)',\r\n height: 5,\r\n color: 'var(--mp-core1-color-main, #ed4229)',\r\n zIndex: 3,\r\n padding: 0,\r\n '& .MuiSlider-thumb': {\r\n display: 'none',\r\n width: 12,\r\n height: 12,\r\n backgroundColor: 'var(--mp-core1-color-text, #fff)',\r\n border: `2px solid var(--mp-core1-color-text, #fff)`\r\n },\r\n '&:hover .MuiSlider-thumb': {\r\n display: 'block'\r\n },\r\n '& .MuiSlider-rail': {\r\n color: 'var(--mp-core1-color-text, #fff)',\r\n opacity: 0.3\r\n },\r\n '& .MuiSlider-track': {\r\n borderRadius: 2\r\n }\r\n }}\r\n />\r\n </Box>\r\n )\r\n}\r\n\r\nexport default ProgressBar\r\n"],"names":["ProgressBar","props","bufferedSegments","progress","isLoading","hidden","onChange","_jsxs","Box","sx","position","width","display","alignItems","children","map","seg","idx","_jsx","top","transform","left","concat","height","backgroundColor","pointerEvents","borderRadius","zIndex","backgroundImage","filter","backgroundSize","animation","overflow","Slider","value","min","max","step","_","Number","color","padding","border","opacity"],"mappings":"kGAWA,IAAMA,EAA2C,SAACC,GAChD,IAAQC,EAA4DD,EAA5DC,iBAAkBC,EAA0CF,EAA1CE,SAAUC,EAAgCH,EAAhCG,UAAWC,EAAqBJ,EAArBI,OAAQC,EAAaL,EAAbK,SACvD,OAAc,GAAVD,EAAuB,KAEzBE,EAACC,GAAIC,GAAI,CAAEC,SAAU,WAAYC,MAAO,OAAQC,QAAS,OAAQC,WAAY,UAC1EC,SAAA,CAAAZ,EAAiBa,IAAI,SAACC,EAAKC,GAAG,OAC7BC,EAACV,EAAG,CAEFC,GAAI,CACFC,SAAU,WACVS,IAAK,MACLC,UAAW,mBACXC,QAAIC,OAAKN,EAAIK,KAAO,KACpBV,SAAKW,OAAKN,EAAIL,MAAQ,KACtBY,OAAQ,EACRC,gBAAiB,wBACjBC,cAAe,OACfC,aAAc,EACdC,OAAQ,IAXLV,EAaL,GAGHb,GACCc,EAACV,EACC,CAAAC,GAAI,CACFC,SAAU,WACVS,IAAK,MACLC,UAAW,mBACXC,KAAM,EACNE,OAAQ,EACRZ,MAAO,OACPiB,gBAMA,gOACAC,OAAQ,cACRC,eAAgB,YAChBC,UAAW,qCACXN,cAAe,OACfO,SAAU,SACVN,aAAc,EACdC,OAAQ,KAKdT,EAACe,EACC,CAAAC,MAAO/B,EACPgC,IAAK,EACLC,IAAK,IACLC,KAAM,GACN/B,SAAU,SAACgC,EAAGJ,GAAK,OAAK5B,aAAAA,EAAAA,EAAWiC,OAAOL,GAAO,EACjDzB,GAAI,CACFC,SAAU,WACVS,IAAK,MACLE,KAAM,EACNV,MAAO,OACPS,UAAW,mBACXG,OAAQ,EACRiB,MAAO,sCACPb,OAAQ,EACRc,QAAS,EACT,qBAAsB,CACpB7B,QAAS,OACTD,MAAO,GACPY,OAAQ,GACRC,gBAAiB,mCACjBkB,OAAM,8CAER,2BAA4B,CAC1B9B,QAAS,SAEX,oBAAqB,CACnB4B,MAAO,mCACPG,QAAS,IAEX,qBAAsB,CACpBjB,aAAc,QAM1B"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as e,objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as r}from"react/jsx-runtime";import{forwardRef as a,useRef as n,useEffect as i}from"react";import{styled as l,Box as s,useTheme as d,useMediaQuery as c,Stack as m}from"@mui/material";import{useVideoPlayerCore as u}from"./useVideoPlayerCore.js";import p from"./progressBar.js";import f from"./btn.play.js";import g from"./btn.volume.js";import b from"./btn.pip.js";import v from"./btn.fullscreen.js";import y from"./time.js";var h={root:"MediaPlayerCore-root",control:"MediaPlayerCore-control",controlCompact:"MediaPlayerCore-control-compact",overlay:"MediaPlayerCore-overlay",bufferedSegments:"MediaPlayerCore-buffered-segments"},P={autoPlay:!1,muted:!1,pip:!1,fullscreen:!1,volume:!0,preload:"auto"},C=a(function(e,a){var l=n(null),s=n(null),C=d(),k=c(C.breakpoints.down("md")),x=function(){for(var e=arguments.length,o=new Array(e),t=0;t<e;t++)o[t]=arguments[t];return function(e){o.forEach(function(o){o&&("function"==typeof o?o(e):o.current=e)})}}(l,a),S=u(l,s),w=S.state,j=S.controls;i(function(){if("mediaSession"in navigator&&e.mediaMetadata&&l.current)return navigator.mediaSession.metadata=new MediaMetadata({title:e.mediaMetadata.title||"Video",artist:e.mediaMetadata.artist||"Berlin Tomek",album:e.mediaMetadata.album||"Media Album",artwork:e.mediaMetadata.artwork?Array.from(e.mediaMetadata.artwork):void 0}),function(){navigator.mediaSession.setActionHandler("play",null),navigator.mediaSession.setActionHandler("pause",null),navigator.mediaSession.setActionHandler("seekbackward",null),navigator.mediaSession.setActionHandler("seekforward",null),navigator.mediaSession.setActionHandler("seekto",null)}},[e.mediaMetadata]);var A=o(o({},P),e.controls);return t(M,{sx:e.sx,className:[h.root,e.className].filter(function(e){return!!e}).join(" "),ref:s,children:[r("video",{ref:x,controls:!1,width:"100%",height:"100%",src:e.src,autoPlay:A.autoPlay,muted:A.muted,preload:A.preload}),r("div",{className:h.overlay,onClick:j.togglePlay}),t("div",{className:h.control,children:[r(f,{isPlaying:w.isPlaying,onClick:j.togglePlay}),r(p,{bufferedSegments:w.bufferedSegments,progress:w.progress,isLoading:w.isLoading,onChange:j.handleSeek}),r(y,{currentTime:w.currentTime,duration:w.duration}),r(g,{hidden:k||A.muted||!A.volume,sliderPosition:"right",orientation:"horizontal",muted:w.muted,volume:w.volume,setVolume:j.setVolume,toggleMute:j.toggleMute}),t(m,{flexDirection:"row",alignItems:"center",gap:0,children:[e.anotherControls,r(b,{hidden:k||!A.pip,onClick:j.togglePIP}),r(v,{hidden:!A.fullscreen,isFullscreen:w.isFullscreen,onClick:j.toggleFullscreen})]})]}),r("div",{className:h.controlCompact,children:r(p,{bufferedSegments:w.bufferedSegments,progress:w.progress,isLoading:w.isLoading})})]})}),M=l(s)(e(e(e(e(e({"--mp-core1-color-main":"#ed4229","--mp-core1-color-text":"#fff","--mp-core1-icon-size":"34px",width:"640px",height:"360px",position:"relative"},".".concat(h.control),{position:"absolute",bottom:0,left:0,width:"100%",display:"flex",alignItems:"center",padding:"6px 8px",gap:"8px",zIndex:3,transition:"0.3s",transform:"translateY(100%)"}),".".concat(h.controlCompact),{position:"absolute",bottom:0,left:0,width:"100%",transition:"0.3s",zIndex:2,opacity:.5}),".".concat(h.overlay),{position:"absolute",bottom:0,left:0,width:"100%",height:"100%",zIndex:1,opacity:0,transition:"0.3s",cursor:"pointer",background:"linear-gradient(to top, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0) 20%)"}),".".concat(h.bufferedSegments),{position:"absolute",top:0,height:"100%",backgroundColor:"rgba(255,255,255,0.4)",pointerEvents:"none"}),"&:hover",e(e(e({},".".concat(h.overlay),{opacity:1}),".".concat(h.control),{transform:"translateY(0)"}),".".concat(h.controlCompact),{opacity:0,transform:"translateY(110%)"})));export{C as default,P as defaultControlsConfig};
1
+ import{defineProperty as e,objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as r}from"react/jsx-runtime";import{forwardRef as a,useRef as n,useEffect as i}from"react";import{styled as l,Box as s,useTheme as d,useMediaQuery as c,Stack as m}from"@mui/material";import{useVideoPlayerCore as u}from"./useVideoPlayerCore.js";import p from"./progressBar.js";import f from"./btn.play.js";import g from"./btn.volume.js";import h from"./btn.pip.js";import v from"./btn.fullscreen.js";import y from"./time.js";var b={autoPlay:!1,muted:!1,pip:!1,fullscreen:!1,volume:!0,preload:"auto"},C=a(function(e,a){var l=n(null),s=n(null),C=d(),x=c(C.breakpoints.down("md")),k=function(){for(var e=arguments.length,o=new Array(e),t=0;t<e;t++)o[t]=arguments[t];return function(e){o.forEach(function(o){o&&("function"==typeof o?o(e):o.current=e)})}}(l,a),S=u(l,s),w=S.state,j=S.controls;i(function(){if("mediaSession"in navigator&&e.mediaMetadata&&l.current)return navigator.mediaSession.metadata=new MediaMetadata({title:e.mediaMetadata.title||"Video",artist:e.mediaMetadata.artist||"Berlin Tomek",album:e.mediaMetadata.album||"Media Album",artwork:e.mediaMetadata.artwork?Array.from(e.mediaMetadata.artwork):void 0}),function(){navigator.mediaSession.setActionHandler("play",null),navigator.mediaSession.setActionHandler("pause",null),navigator.mediaSession.setActionHandler("seekbackward",null),navigator.mediaSession.setActionHandler("seekforward",null),navigator.mediaSession.setActionHandler("seekto",null)}},[e.mediaMetadata]);var A=!0===e.readonly;i(function(){if(A){var e=l.current;e&&e.play().catch(function(){})}},[A]);var H=o(o({},b),e.controls);return t(M,{sx:e.sx,className:[P.root,e.className].filter(function(e){return!!e}).join(" "),ref:s,children:[r("video",{ref:k,controls:!1,width:"100%",height:"100%",src:e.src,autoPlay:H.autoPlay,muted:H.muted,preload:H.preload}),r("div",o({className:P.overlay},A?{}:{onClick:j.togglePlay})),t("div",{className:P.control,children:[r(f,{hidden:A,isPlaying:w.isPlaying,onClick:j.togglePlay}),r(p,{hidden:A,bufferedSegments:w.bufferedSegments,progress:w.progress,isLoading:w.isLoading,onChange:j.handleSeek}),r(y,{currentTime:w.currentTime,duration:w.duration}),r(g,{hidden:A||x||H.muted||!H.volume,sliderPosition:"right",orientation:"horizontal",muted:w.muted,volume:w.volume,setVolume:j.setVolume,toggleMute:j.toggleMute}),t(m,{flexDirection:"row",alignItems:"center",gap:0,children:[e.anotherControls,r(h,{hidden:x||!H.pip,onClick:j.togglePIP}),r(v,{hidden:!H.fullscreen,isFullscreen:w.isFullscreen,onClick:j.toggleFullscreen})]})]}),r("div",{className:P.controlCompact,children:r(p,{hidden:A,bufferedSegments:w.bufferedSegments,progress:w.progress,isLoading:w.isLoading})})]})}),P={root:"MediaPlayerCore-root",control:"MediaPlayerCore-control",controlCompact:"MediaPlayerCore-control-compact",overlay:"MediaPlayerCore-overlay",bufferedSegments:"MediaPlayerCore-buffered-segments"},x=P,M=l(s)(e(e(e(e(e({"--mp-core1-color-main":"#ed4229","--mp-core1-color-text":"#fff","--mp-core1-icon-size":"34px",width:"640px",height:"360px",position:"relative"},".".concat(x.control),{position:"absolute",bottom:0,left:0,width:"100%",display:"flex",alignItems:"center",justifyContent:"flex-end",padding:"6px 8px",gap:"8px",zIndex:3,transition:"0.3s",transform:"translateY(100%)"}),".".concat(x.controlCompact),{position:"absolute",bottom:0,left:0,width:"100%",transition:"0.3s",zIndex:2,opacity:.5}),".".concat(x.overlay),{position:"absolute",bottom:0,left:0,width:"100%",height:"100%",zIndex:1,opacity:0,transition:"0.3s",cursor:"pointer",background:"linear-gradient(to top, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0) 20%)"}),".".concat(x.bufferedSegments),{position:"absolute",top:0,height:"100%",backgroundColor:"rgba(255,255,255,0.4)",pointerEvents:"none"}),"&:hover",e(e(e({},".".concat(x.overlay),{opacity:1}),".".concat(x.control),{transform:"translateY(0)"}),".".concat(x.controlCompact),{opacity:0,transform:"translateY(110%)"})));export{C as default,b as defaultControlsConfig};
2
2
  //# sourceMappingURL=videoplayer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"videoplayer.js","sources":["../../../src/media-player/core/videoplayer.tsx"],"sourcesContent":["import { forwardRef, useEffect, useRef } from 'react'\r\nimport { Box, Stack, styled, SxProps, Theme, useMediaQuery, useTheme } from '@mui/material'\r\nimport { useVideoPlayerCore } from './useVideoPlayerCore'\r\nimport VideoProgressBar from './progressBar'\r\nimport PlayButton from './btn.play'\r\nimport BtnVolume from './btn.volume'\r\nimport BtnPIP from './btn.pip'\r\nimport FullscreenButton from './btn.fullscreen'\r\nimport MediaTime from './time'\r\n\r\nconst MPCoreClasses = {\r\n root: 'MediaPlayerCore-root',\r\n control: 'MediaPlayerCore-control',\r\n controlCompact: 'MediaPlayerCore-control-compact',\r\n overlay: 'MediaPlayerCore-overlay',\r\n playButton: 'MediaPlayerCore-play-button',\r\n timer: 'MediaPlayerCore-timer',\r\n progressBar: 'MediaPlayerCore-progress-bar',\r\n loading: 'MediaPlayerCore-loading',\r\n timeline: 'MediaPlayerCore-timeline',\r\n bufferedSegments: 'MediaPlayerCore-buffered-segments'\r\n}\r\n\r\nexport interface IControlsConfig {\r\n autoPlay?: boolean\r\n muted?: boolean\r\n volume?: boolean\r\n pip?: boolean\r\n fullscreen?: boolean\r\n preload?: 'auto' | 'metadata' | 'none'\r\n}\r\n\r\n// Giá trị mặc định cho MediaPlayerCore2Slots\r\nexport const defaultControlsConfig: IControlsConfig = {\r\n autoPlay: false,\r\n muted: false,\r\n pip: false,\r\n fullscreen: false,\r\n volume: true,\r\n preload: 'auto'\r\n}\r\n\r\nexport interface MediaPlayerSlot {\r\n controls?: IControlsConfig\r\n anotherControls?: React.ReactNode\r\n mediaMetadata?: MediaMetadata\r\n}\r\ninterface IProps extends MediaPlayerSlot {\r\n src?: string\r\n sx?: SxProps<Theme>\r\n className?: string\r\n}\r\n\r\nconst MediaPlayerCore = forwardRef<HTMLVideoElement, IProps>((props, ref) => {\r\n const videoRef = useRef<HTMLVideoElement | null>(null)\r\n const videoContainerRef = useRef<HTMLDivElement>(null)\r\n const theme = useTheme()\r\n const isMobile = useMediaQuery(theme.breakpoints.down('md'))\r\n const combinedRef = mergeRefs(videoRef, ref)\r\n const { state, controls } = useVideoPlayerCore(videoRef, videoContainerRef)\r\n\r\n function mergeRefs<T>(...refs: (React.Ref<T> | undefined)[]): React.RefCallback<T> {\r\n return (value: T) => {\r\n refs.forEach((ref) => {\r\n if (!ref) return\r\n if (typeof ref === 'function') {\r\n ref(value)\r\n } else {\r\n ;(ref as React.MutableRefObject<T | null>).current = value\r\n }\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!('mediaSession' in navigator) || !props.mediaMetadata) return\r\n const video = videoRef.current\r\n if (!video) return\r\n // Set metadata\r\n navigator.mediaSession.metadata = new MediaMetadata({\r\n title: props.mediaMetadata.title || 'Video',\r\n artist: props.mediaMetadata.artist || 'Berlin Tomek',\r\n album: props.mediaMetadata.album || 'Media Album',\r\n artwork: props.mediaMetadata.artwork ? Array.from(props.mediaMetadata.artwork) : undefined\r\n })\r\n return () => {\r\n navigator.mediaSession.setActionHandler('play', null)\r\n navigator.mediaSession.setActionHandler('pause', null)\r\n navigator.mediaSession.setActionHandler('seekbackward', null)\r\n navigator.mediaSession.setActionHandler('seekforward', null)\r\n navigator.mediaSession.setActionHandler('seekto', null)\r\n }\r\n }, [props.mediaMetadata])\r\n\r\n const controlsConfig = { ...defaultControlsConfig, ...props.controls }\r\n\r\n const getClasses = () => {\r\n return [MPCoreClasses.root, props.className].filter((x) => !!x).join(' ')\r\n }\r\n\r\n return (\r\n <Wrap sx={props.sx} className={getClasses()} ref={videoContainerRef}>\r\n <video\r\n ref={combinedRef}\r\n controls={false}\r\n width='100%'\r\n height='100%'\r\n src={props.src}\r\n autoPlay={controlsConfig.autoPlay}\r\n muted={controlsConfig.muted}\r\n preload={controlsConfig.preload}\r\n />\r\n <div className={MPCoreClasses.overlay} onClick={controls.togglePlay} />\r\n <div className={MPCoreClasses.control}>\r\n <PlayButton isPlaying={state.isPlaying} onClick={controls.togglePlay} />\r\n <VideoProgressBar\r\n bufferedSegments={state.bufferedSegments}\r\n progress={state.progress}\r\n isLoading={state.isLoading}\r\n onChange={controls.handleSeek}\r\n />\r\n <MediaTime currentTime={state.currentTime} duration={state.duration} />\r\n <BtnVolume\r\n hidden={isMobile || controlsConfig.muted || !controlsConfig.volume}\r\n sliderPosition='right'\r\n orientation='horizontal'\r\n muted={state.muted}\r\n volume={state.volume}\r\n setVolume={controls.setVolume}\r\n toggleMute={controls.toggleMute}\r\n />\r\n <Stack flexDirection='row' alignItems='center' gap={0}>\r\n {props.anotherControls}\r\n <BtnPIP hidden={isMobile || !controlsConfig.pip} onClick={controls.togglePIP} />\r\n <FullscreenButton hidden={!controlsConfig.fullscreen} isFullscreen={state.isFullscreen} onClick={controls.toggleFullscreen} />\r\n </Stack>\r\n </div>\r\n <div className={MPCoreClasses.controlCompact}>\r\n <VideoProgressBar bufferedSegments={state.bufferedSegments} progress={state.progress} isLoading={state.isLoading} />\r\n </div>\r\n </Wrap>\r\n )\r\n})\r\n\r\nexport default MediaPlayerCore\r\n\r\nconst Wrap = styled(Box)({\r\n '--mp-core1-color-main': '#ed4229',\r\n '--mp-core1-color-text': '#fff',\r\n '--mp-core1-icon-size': '34px',\r\n width: '640px',\r\n height: '360px',\r\n position: 'relative',\r\n [`.${MPCoreClasses.control}`]: {\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '6px 8px',\r\n gap: '8px',\r\n zIndex: 3,\r\n transition: '0.3s',\r\n transform: 'translateY(100%)'\r\n },\r\n [`.${MPCoreClasses.controlCompact}`]: {\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n width: '100%',\r\n transition: '0.3s',\r\n zIndex: 2,\r\n opacity: 0.5\r\n },\r\n [`.${MPCoreClasses.overlay}`]: {\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n zIndex: 1,\r\n opacity: 0,\r\n transition: '0.3s',\r\n cursor: 'pointer',\r\n background: 'linear-gradient(to top, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0) 20%)'\r\n },\r\n [`.${MPCoreClasses.bufferedSegments}`]: {\r\n position: 'absolute',\r\n top: 0,\r\n height: '100%',\r\n backgroundColor: 'rgba(255,255,255,0.4)',\r\n pointerEvents: 'none'\r\n },\r\n '&:hover': {\r\n [`.${MPCoreClasses.overlay}`]: {\r\n opacity: 1\r\n },\r\n [`.${MPCoreClasses.control}`]: {\r\n transform: 'translateY(0)'\r\n },\r\n [`.${MPCoreClasses.controlCompact}`]: {\r\n opacity: 0,\r\n transform: 'translateY(110%)'\r\n }\r\n }\r\n})\r\n"],"names":["MPCoreClasses","root","control","controlCompact","overlay","bufferedSegments","defaultControlsConfig","autoPlay","muted","pip","fullscreen","volume","preload","MediaPlayerCore","forwardRef","props","ref","videoRef","useRef","videoContainerRef","theme","useTheme","isMobile","useMediaQuery","breakpoints","down","combinedRef","_len","arguments","length","refs","Array","_key","value","forEach","current","mergeRefs","_useVideoPlayerCore","useVideoPlayerCore","state","controls","useEffect","navigator","mediaMetadata","mediaSession","metadata","MediaMetadata","title","artist","album","artwork","from","undefined","setActionHandler","controlsConfig","_objectSpread","_jsxs","Wrap","sx","className","filter","x","join","children","_jsx","width","height","src","onClick","togglePlay","PlayButton","isPlaying","VideoProgressBar","progress","isLoading","onChange","handleSeek","MediaTime","currentTime","duration","BtnVolume","hidden","sliderPosition","orientation","setVolume","toggleMute","Stack","flexDirection","alignItems","gap","anotherControls","BtnPIP","togglePIP","FullscreenButton","isFullscreen","toggleFullscreen","styled","Box","_defineProperty","position","concat","bottom","left","display","padding","zIndex","transition","transform","opacity","cursor","background","top","backgroundColor","pointerEvents"],"mappings":"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"}
1
+ {"version":3,"file":"videoplayer.js","sources":["../../../src/media-player/core/videoplayer.tsx"],"sourcesContent":["import { forwardRef, useEffect, useRef } from 'react'\r\nimport { Box, Stack, styled, SxProps, Theme, useMediaQuery, useTheme } from '@mui/material'\r\nimport { useVideoPlayerCore } from './useVideoPlayerCore'\r\nimport VideoProgressBar from './progressBar'\r\nimport PlayButton from './btn.play'\r\nimport BtnVolume from './btn.volume'\r\nimport BtnPIP from './btn.pip'\r\nimport FullscreenButton from './btn.fullscreen'\r\nimport MediaTime from './time'\r\n\r\nexport interface IControlsConfig {\r\n autoPlay?: boolean\r\n muted?: boolean\r\n volume?: boolean\r\n pip?: boolean\r\n fullscreen?: boolean\r\n preload?: 'auto' | 'metadata' | 'none'\r\n}\r\n\r\n// Giá trị mặc định cho MediaPlayerCore2Slots\r\nexport const defaultControlsConfig: IControlsConfig = {\r\n autoPlay: false,\r\n muted: false,\r\n pip: false,\r\n fullscreen: false,\r\n volume: true,\r\n preload: 'auto'\r\n}\r\n\r\nexport interface IVideoPlayerSlots {\r\n controls?: IControlsConfig\r\n anotherControls?: React.ReactNode\r\n mediaMetadata?: MediaMetadata\r\n}\r\n\r\nexport interface IVideoPlayerProps extends IVideoPlayerSlots {\r\n src?: string\r\n sx?: SxProps<Theme>\r\n className?: string\r\n readonly?: boolean\r\n}\r\n\r\nconst VideoPlayerCore = forwardRef<HTMLVideoElement, IVideoPlayerProps>((props, ref) => {\r\n const videoRef = useRef<HTMLVideoElement | null>(null)\r\n const videoContainerRef = useRef<HTMLDivElement>(null)\r\n const theme = useTheme()\r\n const isMobile = useMediaQuery(theme.breakpoints.down('md'))\r\n const combinedRef = mergeRefs(videoRef, ref)\r\n const { state, controls } = useVideoPlayerCore(videoRef, videoContainerRef)\r\n\r\n function mergeRefs<T>(...refs: (React.Ref<T> | undefined)[]): React.RefCallback<T> {\r\n return (value: T) => {\r\n refs.forEach((ref) => {\r\n if (!ref) return\r\n if (typeof ref === 'function') {\r\n ref(value)\r\n } else {\r\n ;(ref as React.MutableRefObject<T | null>).current = value\r\n }\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!('mediaSession' in navigator) || !props.mediaMetadata) return\r\n const video = videoRef.current\r\n if (!video) return\r\n // Set metadata\r\n navigator.mediaSession.metadata = new MediaMetadata({\r\n title: props.mediaMetadata.title || 'Video',\r\n artist: props.mediaMetadata.artist || 'Berlin Tomek',\r\n album: props.mediaMetadata.album || 'Media Album',\r\n artwork: props.mediaMetadata.artwork ? Array.from(props.mediaMetadata.artwork) : undefined\r\n })\r\n return () => {\r\n navigator.mediaSession.setActionHandler('play', null)\r\n navigator.mediaSession.setActionHandler('pause', null)\r\n navigator.mediaSession.setActionHandler('seekbackward', null)\r\n navigator.mediaSession.setActionHandler('seekforward', null)\r\n navigator.mediaSession.setActionHandler('seekto', null)\r\n }\r\n }, [props.mediaMetadata])\r\n\r\n const isReadOnly = props.readonly === true\r\n useEffect(() => {\r\n if (!isReadOnly) return\r\n const v = videoRef.current\r\n if (!v) return\r\n // đảm bảo play (bỏ qua interaction)\r\n v.play().catch(() => {\r\n // nếu trình duyệt chặn autoplay, giữ im lặng\r\n })\r\n }, [isReadOnly])\r\n\r\n const controlsConfig = { ...defaultControlsConfig, ...props.controls }\r\n\r\n const getClasses = () => {\r\n return [MPCoreClasses.root, props.className].filter((x) => !!x).join(' ')\r\n }\r\n\r\n return (\r\n <RootStyled sx={props.sx} className={getClasses()} ref={videoContainerRef}>\r\n <video\r\n ref={combinedRef}\r\n controls={false}\r\n width='100%'\r\n height='100%'\r\n src={props.src}\r\n autoPlay={controlsConfig.autoPlay}\r\n muted={controlsConfig.muted}\r\n preload={controlsConfig.preload}\r\n />\r\n <div className={MPCoreClasses.overlay} {...(!isReadOnly ? { onClick: controls.togglePlay } : {})} />\r\n <div className={MPCoreClasses.control}>\r\n <PlayButton hidden={isReadOnly} isPlaying={state.isPlaying} onClick={controls.togglePlay} />\r\n <VideoProgressBar\r\n hidden={isReadOnly}\r\n bufferedSegments={state.bufferedSegments}\r\n progress={state.progress}\r\n isLoading={state.isLoading}\r\n onChange={controls.handleSeek}\r\n />\r\n <MediaTime currentTime={state.currentTime} duration={state.duration} />\r\n <BtnVolume\r\n hidden={isReadOnly || isMobile || controlsConfig.muted || !controlsConfig.volume}\r\n sliderPosition='right'\r\n orientation='horizontal'\r\n muted={state.muted}\r\n volume={state.volume}\r\n setVolume={controls.setVolume}\r\n toggleMute={controls.toggleMute}\r\n />\r\n <Stack flexDirection='row' alignItems='center' gap={0}>\r\n {props.anotherControls}\r\n <BtnPIP hidden={isMobile || !controlsConfig.pip} onClick={controls.togglePIP} />\r\n <FullscreenButton hidden={!controlsConfig.fullscreen} isFullscreen={state.isFullscreen} onClick={controls.toggleFullscreen} />\r\n </Stack>\r\n </div>\r\n <div className={MPCoreClasses.controlCompact}>\r\n <VideoProgressBar hidden={isReadOnly} bufferedSegments={state.bufferedSegments} progress={state.progress} isLoading={state.isLoading} />\r\n </div>\r\n </RootStyled>\r\n )\r\n})\r\n\r\nexport default VideoPlayerCore\r\n\r\nconst MPCoreClasses = {\r\n root: 'MediaPlayerCore-root',\r\n control: 'MediaPlayerCore-control',\r\n controlCompact: 'MediaPlayerCore-control-compact',\r\n overlay: 'MediaPlayerCore-overlay',\r\n playButton: 'MediaPlayerCore-play-button',\r\n timer: 'MediaPlayerCore-timer',\r\n progressBar: 'MediaPlayerCore-progress-bar',\r\n loading: 'MediaPlayerCore-loading',\r\n timeline: 'MediaPlayerCore-timeline',\r\n bufferedSegments: 'MediaPlayerCore-buffered-segments'\r\n}\r\n\r\nconst classes = MPCoreClasses\r\n\r\nconst RootStyled = styled(Box)({\r\n '--mp-core1-color-main': '#ed4229',\r\n '--mp-core1-color-text': '#fff',\r\n '--mp-core1-icon-size': '34px',\r\n width: '640px',\r\n height: '360px',\r\n position: 'relative',\r\n [`.${classes.control}`]: {\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: '6px 8px',\r\n gap: '8px',\r\n zIndex: 3,\r\n transition: '0.3s',\r\n transform: 'translateY(100%)'\r\n },\r\n [`.${classes.controlCompact}`]: {\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n width: '100%',\r\n transition: '0.3s',\r\n zIndex: 2,\r\n opacity: 0.5\r\n },\r\n [`.${classes.overlay}`]: {\r\n position: 'absolute',\r\n bottom: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n zIndex: 1,\r\n opacity: 0,\r\n transition: '0.3s',\r\n cursor: 'pointer',\r\n background: 'linear-gradient(to top, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0) 20%)'\r\n },\r\n [`.${classes.bufferedSegments}`]: {\r\n position: 'absolute',\r\n top: 0,\r\n height: '100%',\r\n backgroundColor: 'rgba(255,255,255,0.4)',\r\n pointerEvents: 'none'\r\n },\r\n '&:hover': {\r\n [`.${classes.overlay}`]: { opacity: 1 },\r\n [`.${classes.control}`]: { transform: 'translateY(0)' },\r\n [`.${classes.controlCompact}`]: { opacity: 0, transform: 'translateY(110%)' }\r\n }\r\n})\r\n"],"names":["defaultControlsConfig","autoPlay","muted","pip","fullscreen","volume","preload","VideoPlayerCore","forwardRef","props","ref","videoRef","useRef","videoContainerRef","theme","useTheme","isMobile","useMediaQuery","breakpoints","down","combinedRef","_len","arguments","length","refs","Array","_key","value","forEach","current","mergeRefs","_useVideoPlayerCore","useVideoPlayerCore","state","controls","useEffect","navigator","mediaMetadata","mediaSession","metadata","MediaMetadata","title","artist","album","artwork","from","undefined","setActionHandler","isReadOnly","readonly","v","play","controlsConfig","_objectSpread","_jsxs","RootStyled","sx","className","MPCoreClasses","root","filter","x","join","children","_jsx","width","height","src","overlay","onClick","togglePlay","control","PlayButton","hidden","isPlaying","VideoProgressBar","bufferedSegments","progress","isLoading","onChange","handleSeek","MediaTime","currentTime","duration","BtnVolume","sliderPosition","orientation","setVolume","toggleMute","Stack","flexDirection","alignItems","gap","anotherControls","BtnPIP","togglePIP","FullscreenButton","isFullscreen","toggleFullscreen","controlCompact","classes","styled","Box","_defineProperty","position","concat","bottom","left","display","justifyContent","padding","zIndex","transition","transform","opacity","cursor","background","top","backgroundColor","pointerEvents"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as o}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as r,jsx as i}from"react/jsx-runtime";import{styled as e,Box as t,Fade as a,Skeleton as l}from"@mui/material";import{useStreamUrl as n,getAspectRatioStyled as d}from"./helpers.js";import{EMediaPlayerStatus as s}from"./types.js";import m from"./core/videoplayer.js";var u=function(e){var t,u,h=n(e.resourceId,e.fetchDataStream),v=h.status,f=h.streamUrl;return r(p,{className:v===s.Loaded?"loaded":"",sx:d(null===(t=e.slots)||void 0===t?void 0:t.aspectRatio),children:[i(c,{children:f&&i(m,o({className:"player",src:f,anotherControls:!0,controls:{autoPlay:!0,muted:!0}},null===(u=e.slots)||void 0===u?void 0:u.coreProps))}),i(a,{in:v===s.Loading||e.loading,unmountOnExit:!0,children:i(c,{children:function(){var o,r,t;if(null!==(o=e.slots)&&void 0!==o&&o.loading)return e.slots.loading;var a=null!==(r=null===(t=e.slots)||void 0===t||null===(t=t.loadingProps)||void 0===t?void 0:t.animationDuration)&&void 0!==r?r:"1s";return i(l,{animation:"wave",variant:"rounded",sx:{width:"100%",height:"100%","&::after":{animationDuration:a}}})}()})}),i(a,{in:v===s.Error&&!e.loading,unmountOnExit:!0,children:i(c,{children:i("img",{src:"images/video-error.webp",alt:"video-error",style:{width:"100%",height:"100%"}})})})]})},p=e(t)({"--mp-core1-color-main":"#ed4229","--mp-core1-color-text":"#fff","--mp-core1-icon-size":"34px",position:"relative",paddingBottom:"56.25%",borderRadius:"6px",overflow:"hidden","&.loaded":{background:"#000"}}),c=e(t)({position:"absolute",top:0,left:0,width:"100%",height:"100%",zIndex:2,".player":{width:"100%",height:"100%"}});export{u as MediaPlayerMuted,u as default};
1
+ import{objectSpread2 as o}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as r,jsx as i}from"react/jsx-runtime";import{styled as e,Box as t,Fade as l,Skeleton as a}from"@mui/material";import{EMediaPlayerStatus as n}from"./types.js";import{useStreamUrl as d,getAspectRatioStyled as s}from"./helpers.js";import u from"./core/videoplayer.js";var m=function(e){var t,m,v,h=d(e.resourceId,e.fetchDataStream),f=h.status,g=h.streamUrl;return r(c,{className:f===n.Loaded?"loaded":"",sx:s(null===(t=e.slots)||void 0===t?void 0:t.aspectRatio),children:[i(p,{children:g&&i(u,o(o({className:"player",src:g,anotherControls:!0},null===(m=e.slots)||void 0===m?void 0:m.coreProps),{},{controls:o({autoPlay:!0,muted:!0},null===(v=e.slots)||void 0===v||null===(v=v.coreProps)||void 0===v?void 0:v.controls)}))}),i(l,{in:f===n.Loading||e.loading,unmountOnExit:!0,children:i(p,{children:function(){var o,r,t;if(null!==(o=e.slots)&&void 0!==o&&o.loading)return e.slots.loading;var l=null!==(r=null===(t=e.slots)||void 0===t||null===(t=t.loadingProps)||void 0===t?void 0:t.animationDuration)&&void 0!==r?r:"1s";return i(a,{animation:"wave",variant:"rounded",sx:{width:"100%",height:"100%","&::after":{animationDuration:l}}})}()})}),i(l,{in:f===n.Error&&!e.loading,unmountOnExit:!0,children:i(p,{children:i("img",{src:"images/video-error.webp",alt:"video-error",style:{width:"100%",height:"100%"}})})})]})},c=e(t)({"--mp-core1-color-main":"#ed4229","--mp-core1-color-text":"#fff","--mp-core1-icon-size":"34px",position:"relative",paddingBottom:"56.25%",borderRadius:"6px",overflow:"hidden","&.loaded":{background:"#000"}}),p=e(t)({position:"absolute",top:0,left:0,width:"100%",height:"100%",zIndex:2,".player":{width:"100%",height:"100%"}});export{m as MediaPlayerMuted,m as default};
2
2
  //# sourceMappingURL=muted.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"muted.js","sources":["../../src/media-player/muted.tsx"],"sourcesContent":["import type { FC } from 'react'\r\nimport type { MediaPlayerBaseProps, MediaPlayerBaseSlots } from './types'\r\nimport { Box, Fade, Skeleton, styled } from '@mui/material'\r\nimport { getAspectRatioStyled, useStreamUrl } from './helpers'\r\nimport { EMediaPlayerStatus } from './types'\r\nimport MediaPlayerCore, { MediaPlayerSlot } from './core/videoplayer'\r\n\r\nexport interface SlotMediaPlayerMutedProps extends MediaPlayerBaseSlots {\r\n coreProps?: MediaPlayerSlot\r\n}\r\nexport interface IMediaPlayerMutedProps extends MediaPlayerBaseProps {\r\n slots?: SlotMediaPlayerMutedProps\r\n}\r\n\r\nexport const MediaPlayerMuted: FC<IMediaPlayerMutedProps> = (props) => {\r\n const { status, streamUrl } = useStreamUrl(props.resourceId, props.fetchDataStream)\r\n\r\n const renderLoading = () => {\r\n if (props.slots?.loading) return props.slots.loading\r\n const duration = props.slots?.loadingProps?.animationDuration ?? '1s'\r\n return <Skeleton animation='wave' variant='rounded' sx={{ width: '100%', height: '100%', '&::after': { animationDuration: duration } }} />\r\n }\r\n\r\n return (\r\n <WrapPlayer className={status === EMediaPlayerStatus.Loaded ? 'loaded' : ''} sx={getAspectRatioStyled(props.slots?.aspectRatio)}>\r\n <WrapVideo>\r\n {streamUrl && (\r\n // <MediaPlayerCore1 className='player' src={streamUrl} slots={props.slots?.core1Props} />\r\n <MediaPlayerCore\r\n className='player'\r\n src={streamUrl}\r\n anotherControls\r\n controls={{ autoPlay: true, muted: true }}\r\n {...props.slots?.coreProps}\r\n />\r\n )}\r\n </WrapVideo>\r\n <Fade in={status === EMediaPlayerStatus.Loading || props.loading} unmountOnExit>\r\n <WrapVideo>{renderLoading()}</WrapVideo>\r\n </Fade>\r\n <Fade in={status === EMediaPlayerStatus.Error && !props.loading} unmountOnExit>\r\n <WrapVideo>\r\n <img src='images/video-error.webp' alt='video-error' style={{ width: '100%', height: '100%' }} />\r\n </WrapVideo>\r\n </Fade>\r\n </WrapPlayer>\r\n )\r\n}\r\n\r\nexport default MediaPlayerMuted\r\n\r\nconst WrapPlayer = styled(Box)({\r\n '--mp-core1-color-main': '#ed4229',\r\n '--mp-core1-color-text': '#fff',\r\n '--mp-core1-icon-size': '34px',\r\n position: 'relative',\r\n paddingBottom: '56.25%',\r\n borderRadius: '6px',\r\n overflow: 'hidden',\r\n '&.loaded': {\r\n background: '#000'\r\n }\r\n})\r\n\r\nconst WrapVideo = styled(Box)({\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n zIndex: 2,\r\n '.player': {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n})\r\n"],"names":["MediaPlayerMuted","props","_props$slots3","_props$slots4","_useStreamUrl","useStreamUrl","resourceId","fetchDataStream","status","streamUrl","_jsxs","WrapPlayer","className","EMediaPlayerStatus","Loaded","sx","getAspectRatioStyled","slots","aspectRatio","children","_jsx","WrapVideo","MediaPlayerCore","_objectSpread","src","anotherControls","controls","autoPlay","muted","coreProps","Fade","in","Loading","loading","unmountOnExit","_props$slots","_props$slots$loadingP","_props$slots2","duration","loadingProps","animationDuration","Skeleton","animation","variant","width","height","renderLoading","Error","alt","style","styled","Box","position","paddingBottom","borderRadius","overflow","background","top","left","zIndex"],"mappings":"kWAcaA,EAA+C,SAACC,GAAS,IAAAC,EAAAC,EACpEC,EAA8BC,EAAaJ,EAAMK,WAAYL,EAAMM,iBAA3DC,EAAMJ,EAANI,OAAQC,EAASL,EAATK,UAQhB,OACEC,EAACC,EAAU,CAACC,UAAWJ,IAAWK,EAAmBC,OAAS,SAAW,GAAIC,GAAIC,EAAgC,QAAZd,EAACD,EAAMgB,aAAK,IAAAf,OAAA,EAAXA,EAAagB,aACjHC,SAAA,CAAAC,EAACC,EAAS,CAAAF,SACPV,GAECW,EAACE,EAAeC,EAAA,CACdX,UAAU,SACVY,IAAKf,EACLgB,mBACAC,SAAU,CAAEC,UAAU,EAAMC,OAAO,IACpBzB,QAD0BA,EACrCF,EAAMgB,aAANd,IAAWA,OAAXA,EAAAA,EAAa0B,cAIvBT,EAACU,EAAI,CAACC,GAAIvB,IAAWK,EAAmBmB,SAAW/B,EAAMgC,QAASC,eAAa,EAAAf,SAC7EC,EAACC,YArBe,WAAK,IAAAc,EAAAC,EAAAC,EACzB,WAAAF,EAAIlC,EAAMgB,aAAK,IAAAkB,GAAXA,EAAaF,QAAS,OAAOhC,EAAMgB,MAAMgB,QAC7C,IAAMK,EAAuD,QAA/CF,EAAc,QAAdC,EAAGpC,EAAMgB,aAAK,IAAAoB,GAAc,QAAdA,EAAXA,EAAaE,oBAAY,IAAAF,OAAA,EAAzBA,EAA2BG,yBAAiB,IAAAJ,EAAAA,EAAI,KACjE,OAAOhB,EAACqB,EAAS,CAAAC,UAAU,OAAOC,QAAQ,UAAU5B,GAAI,CAAE6B,MAAO,OAAQC,OAAQ,OAAQ,WAAY,CAAEL,kBAAmBF,KAC3H,CAiBiBQ,OAEd1B,EAACU,EAAI,CAACC,GAAIvB,IAAWK,EAAmBkC,QAAU9C,EAAMgC,QAASC,eAC/D,EAAAf,SAAAC,EAACC,EAAS,CAAAF,SACRC,SAAKI,IAAI,0BAA0BwB,IAAI,cAAcC,MAAO,CAAEL,MAAO,OAAQC,OAAQ,gBAK/F,EAIMlC,EAAauC,EAAOC,EAAPD,CAAY,CAC7B,wBAAyB,UACzB,wBAAyB,OACzB,uBAAwB,OACxBE,SAAU,WACVC,cAAe,SACfC,aAAc,MACdC,SAAU,SACV,WAAY,CACVC,WAAY,UAIVnC,EAAY6B,EAAOC,EAAPD,CAAY,CAC5BE,SAAU,WACVK,IAAK,EACLC,KAAM,EACNd,MAAO,OACPC,OAAQ,OACRc,OAAQ,EACR,UAAW,CACTf,MAAO,OACPC,OAAQ"}
1
+ {"version":3,"file":"muted.js","sources":["../../src/media-player/muted.tsx"],"sourcesContent":["// imports\r\nimport { Box, Fade, Skeleton, styled } from '@mui/material'\r\nimport { EMediaPlayerStatus } from './types'\r\nimport { getAspectRatioStyled, useStreamUrl } from './helpers'\r\nimport VideoPlayerCore from './core/videoplayer'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { IVideoPlayerProps } from './core/videoplayer'\r\nimport type { MediaPlayerBaseProps, MediaPlayerBaseSlots } from './types'\r\n\r\nexport interface SlotMediaPlayerMutedProps extends MediaPlayerBaseSlots {\r\n coreProps?: IVideoPlayerProps\r\n}\r\n\r\nexport interface IMediaPlayerMutedProps extends MediaPlayerBaseProps {\r\n slots?: SlotMediaPlayerMutedProps\r\n}\r\n\r\nexport const MediaPlayerMuted: FC<IMediaPlayerMutedProps> = (props) => {\r\n const { status, streamUrl } = useStreamUrl(props.resourceId, props.fetchDataStream)\r\n\r\n const renderLoading = () => {\r\n if (props.slots?.loading) return props.slots.loading\r\n const duration = props.slots?.loadingProps?.animationDuration ?? '1s'\r\n return <Skeleton animation='wave' variant='rounded' sx={{ width: '100%', height: '100%', '&::after': { animationDuration: duration } }} />\r\n }\r\n\r\n return (\r\n <WrapPlayer className={status === EMediaPlayerStatus.Loaded ? 'loaded' : ''} sx={getAspectRatioStyled(props.slots?.aspectRatio)}>\r\n <WrapVideo>\r\n {streamUrl && (\r\n // <MediaPlayerCore1 className='player' src={streamUrl} slots={props.slots?.core1Props} />\r\n <VideoPlayerCore\r\n className='player'\r\n src={streamUrl}\r\n anotherControls\r\n {...props.slots?.coreProps}\r\n controls={{ autoPlay: true, muted: true, ...props.slots?.coreProps?.controls }}\r\n />\r\n )}\r\n </WrapVideo>\r\n <Fade in={status === EMediaPlayerStatus.Loading || props.loading} unmountOnExit>\r\n <WrapVideo>{renderLoading()}</WrapVideo>\r\n </Fade>\r\n <Fade in={status === EMediaPlayerStatus.Error && !props.loading} unmountOnExit>\r\n <WrapVideo>\r\n <img src='images/video-error.webp' alt='video-error' style={{ width: '100%', height: '100%' }} />\r\n </WrapVideo>\r\n </Fade>\r\n </WrapPlayer>\r\n )\r\n}\r\n\r\nexport default MediaPlayerMuted\r\n\r\nconst WrapPlayer = styled(Box)({\r\n '--mp-core1-color-main': '#ed4229',\r\n '--mp-core1-color-text': '#fff',\r\n '--mp-core1-icon-size': '34px',\r\n position: 'relative',\r\n paddingBottom: '56.25%',\r\n borderRadius: '6px',\r\n overflow: 'hidden',\r\n '&.loaded': {\r\n background: '#000'\r\n }\r\n})\r\n\r\nconst WrapVideo = styled(Box)({\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n zIndex: 2,\r\n '.player': {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n})\r\n"],"names":["MediaPlayerMuted","props","_props$slots3","_props$slots4","_props$slots5","_useStreamUrl","useStreamUrl","resourceId","fetchDataStream","status","streamUrl","_jsxs","WrapPlayer","className","EMediaPlayerStatus","Loaded","sx","getAspectRatioStyled","slots","aspectRatio","children","_jsx","WrapVideo","VideoPlayerCore","_objectSpread","src","anotherControls","coreProps","controls","autoPlay","muted","Fade","in","Loading","loading","unmountOnExit","_props$slots","_props$slots$loadingP","_props$slots2","duration","loadingProps","animationDuration","Skeleton","animation","variant","width","height","renderLoading","Error","alt","style","styled","Box","position","paddingBottom","borderRadius","overflow","background","top","left","zIndex"],"mappings":"kWAkBaA,EAA+C,SAACC,GAAS,IAAAC,EAAAC,EAAAC,EACpEC,EAA8BC,EAAaL,EAAMM,WAAYN,EAAMO,iBAA3DC,EAAMJ,EAANI,OAAQC,EAASL,EAATK,UAQhB,OACEC,EAACC,EAAU,CAACC,UAAWJ,IAAWK,EAAmBC,OAAS,SAAW,GAAIC,GAAIC,EAAgC,QAAZf,EAACD,EAAMiB,aAAK,IAAAhB,OAAA,EAAXA,EAAaiB,aACjHC,SAAA,CAAAC,EAACC,EAAS,CAAAF,SACPV,GAECW,EAACE,EAAeC,EAAAA,EAAA,CACdX,UAAU,SACVY,IAAKf,EACLgB,iBAAe,WAAAvB,EACXF,EAAMiB,aAAK,IAAAf,OAAA,EAAXA,EAAawB,WAAS,CAAA,EAAA,CAC1BC,SAAQJ,EAAA,CAAIK,UAAU,EAAMC,OAAO,GAAoB,QAAhB1B,EAAKH,EAAMiB,aAAKd,IAAAA,GAAW,QAAXA,EAAXA,EAAauB,iBAAbvB,IAAsBA,OAAtBA,EAAAA,EAAwBwB,eAI1EP,EAACU,EAAK,CAAAC,GAAIvB,IAAWK,EAAmBmB,SAAWhC,EAAMiC,QAASC,eAAa,EAAAf,SAC7EC,EAACC,EAAW,CAAAF,SArBI,WAAK,IAAAgB,EAAAC,EAAAC,EACzB,WAAAF,EAAInC,EAAMiB,aAAK,IAAAkB,GAAXA,EAAaF,QAAS,OAAOjC,EAAMiB,MAAMgB,QAC7C,IAAMK,EAAuD,QAA/CF,EAAc,QAAdC,EAAGrC,EAAMiB,aAAK,IAAAoB,GAAc,QAAdA,EAAXA,EAAaE,oBAAY,IAAAF,OAAA,EAAzBA,EAA2BG,yBAAiB,IAAAJ,EAAAA,EAAI,KACjE,OAAOhB,EAACqB,EAAS,CAAAC,UAAU,OAAOC,QAAQ,UAAU5B,GAAI,CAAE6B,MAAO,OAAQC,OAAQ,OAAQ,WAAY,CAAEL,kBAAmBF,KAC3H,CAiBiBQ,OAEd1B,EAACU,EAAI,CAACC,GAAIvB,IAAWK,EAAmBkC,QAAU/C,EAAMiC,QAASC,eAAa,EAAAf,SAC5EC,EAACC,EAAS,CAAAF,SACRC,EAAK,MAAA,CAAAI,IAAI,0BAA0BwB,IAAI,cAAcC,MAAO,CAAEL,MAAO,OAAQC,OAAQ,gBAK/F,EAIMlC,EAAauC,EAAOC,EAAPD,CAAY,CAC7B,wBAAyB,UACzB,wBAAyB,OACzB,uBAAwB,OACxBE,SAAU,WACVC,cAAe,SACfC,aAAc,MACdC,SAAU,SACV,WAAY,CACVC,WAAY,UAIVnC,EAAY6B,EAAOC,EAAPD,CAAY,CAC5BE,SAAU,WACVK,IAAK,EACLC,KAAM,EACNd,MAAO,OACPC,OAAQ,OACRc,OAAQ,EACR,UAAW,CACTf,MAAO,OACPC,OAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"player.video-stream.js","sources":["../../src/media-player/player.video-stream.tsx"],"sourcesContent":["import React, { useEffect } from 'react'\r\nimport { Box, Fade, Skeleton, styled } from '@mui/material'\r\nimport { useStreamUrl } from './helpers'\r\nimport MediaPlayerCore, { MediaPlayerSlot } from './core/videoplayer'\r\nimport { EMediaPlayerStatus } from './types'\r\nimport type { MediaPlayerBaseProps, MediaPlayerBaseSlots } from './types'\r\n\r\nexport interface MediaPlayerSlotsProps extends MediaPlayerBaseSlots {\r\n disabledBackground?: boolean\r\n keepTabActive?: boolean\r\n}\r\n\r\ninterface IProps extends MediaPlayerBaseProps {\r\n slots?: MediaPlayerSlotsProps\r\n slotMedia?: MediaPlayerSlot\r\n mediaMetadata?: MediaMetadata\r\n}\r\n\r\nconst mediaPlayerClasses = {\r\n disabledLoading: 'disabled-loading',\r\n disabledBackground: 'disabled-background'\r\n}\r\n\r\nconst MediaPlayerVideo = React.forwardRef<HTMLVideoElement, IProps>((props, ref) => {\r\n const { status, streamUrl } = useStreamUrl(props.resourceId, props.fetchDataStream)\r\n\r\n useEffect(() => {\r\n const keepActive = () => requestAnimationFrame(keepActive)\r\n const rafId = requestAnimationFrame(keepActive)\r\n return () => cancelAnimationFrame(rafId)\r\n }, [])\r\n\r\n const renderLoading = () => {\r\n if (props.slots?.loading) return props.slots.loading\r\n const duration = props.slots?.loadingProps?.animationDuration ?? '1s'\r\n return <Skeleton animation='wave' variant='rounded' sx={{ width: '100%', height: '100%', '&::after': { animationDuration: duration } }} />\r\n }\r\n\r\n const getClasses = (): string | undefined => {\r\n const classes: string[] = []\r\n if (props.slots?.loadingProps?.disabled) classes.push(mediaPlayerClasses.disabledLoading)\r\n if (props.slots?.disabledBackground) classes.push(mediaPlayerClasses.disabledBackground)\r\n if (status !== EMediaPlayerStatus.Loading && !props.loading && streamUrl) {\r\n classes.push('loaded')\r\n }\r\n return classes.length > 0 ? classes.join(' ') : undefined\r\n }\r\n\r\n return (\r\n <WrapPlayer className={getClasses()}>\r\n <WrapVideo sx={{ zIndex: 3 }}>\r\n {streamUrl && (\r\n <MediaPlayerCore\r\n ref={ref}\r\n className='player'\r\n src={streamUrl}\r\n mediaMetadata={props.mediaMetadata}\r\n {...props.slotMedia}\r\n controls={props.slotMedia?.controls}\r\n />\r\n )}\r\n </WrapVideo>\r\n <Fade in={(status === EMediaPlayerStatus.Loading || props.loading) && props.slots?.loadingProps?.disabled !== true}>\r\n <WrapVideo>{renderLoading()}</WrapVideo>\r\n </Fade>\r\n <Fade in={status === EMediaPlayerStatus.Error && !props.loading} unmountOnExit>\r\n <WrapVideo>\r\n <img src='images/video-error.webp' alt='video-error' style={{ width: '100%', height: '100%' }} />\r\n </WrapVideo>\r\n </Fade>\r\n </WrapPlayer>\r\n )\r\n})\r\n\r\nexport default React.memo(MediaPlayerVideo)\r\n\r\nconst WrapPlayer = styled(Box)({\r\n '--mp-core1-color-main': '#ed4229',\r\n '--mp-core1-color-text': '#fff',\r\n '--mp-core1-icon-size': '34px',\r\n position: 'relative',\r\n aspectRatio: '16/9',\r\n borderRadius: '6px',\r\n overflow: 'hidden',\r\n '&.loaded': {\r\n background: '#000',\r\n boxShadow: 'rgba(0, 0, 0, 0.24) 0px 3px 8px'\r\n },\r\n [`&.${mediaPlayerClasses.disabledBackground}`]: {\r\n background: 'unset'\r\n }\r\n})\r\n\r\nconst WrapVideo = styled(Box)({\r\n '--plyr-color-main': '#ed4229',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n zIndex: 2,\r\n '.MPCore1-root': {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n})\r\n"],"names":["styled","Box","_defineProperty","position","aspectRatio","borderRadius","overflow","background","boxShadow","concat","top","left","width","height","zIndex"],"mappings":"mNA4EmBA,EAAOC,EAAPD,CAAWE,EAAA,CAC5B,wBAAyB,UACzB,wBAAyB,OACzB,uBAAwB,OACxBC,SAAU,WACVC,YAAa,OACbC,aAAc,MACdC,SAAU,SACV,WAAY,CACVC,WAAY,OACZC,UAAW,oCACZ,KAAAC,OAnEmB,uBAoE4B,CAC9CF,WAAY,WAIEP,EAAOC,EAAPD,CAAY,CAC5B,oBAAqB,UACrBG,SAAU,WACVO,IAAK,EACLC,KAAM,EACNC,MAAO,OACPC,OAAQ,OACRC,OAAQ,EACR,gBAAiB,CACfF,MAAO,OACPC,OAAQ"}
1
+ {"version":3,"file":"player.video-stream.js","sources":["../../src/media-player/player.video-stream.tsx"],"sourcesContent":["import React, { useEffect } from 'react'\r\nimport { Box, Fade, Skeleton, styled } from '@mui/material'\r\nimport { useStreamUrl } from './helpers'\r\nimport VideoPlayerCore, { IVideoPlayerSlots } from './core/videoplayer'\r\nimport { EMediaPlayerStatus } from './types'\r\nimport type { MediaPlayerBaseProps, MediaPlayerBaseSlots } from './types'\r\n\r\nexport interface MediaPlayerSlotsProps extends MediaPlayerBaseSlots {\r\n disabledBackground?: boolean\r\n keepTabActive?: boolean\r\n}\r\n\r\ninterface IProps extends MediaPlayerBaseProps {\r\n slots?: MediaPlayerSlotsProps\r\n slotMedia?: IVideoPlayerSlots\r\n mediaMetadata?: MediaMetadata\r\n}\r\n\r\nconst mediaPlayerClasses = {\r\n disabledLoading: 'disabled-loading',\r\n disabledBackground: 'disabled-background'\r\n}\r\n\r\nconst MediaPlayerVideo = React.forwardRef<HTMLVideoElement, IProps>((props, ref) => {\r\n const { status, streamUrl } = useStreamUrl(props.resourceId, props.fetchDataStream)\r\n\r\n useEffect(() => {\r\n const keepActive = () => requestAnimationFrame(keepActive)\r\n const rafId = requestAnimationFrame(keepActive)\r\n return () => cancelAnimationFrame(rafId)\r\n }, [])\r\n\r\n const renderLoading = () => {\r\n if (props.slots?.loading) return props.slots.loading\r\n const duration = props.slots?.loadingProps?.animationDuration ?? '1s'\r\n return <Skeleton animation='wave' variant='rounded' sx={{ width: '100%', height: '100%', '&::after': { animationDuration: duration } }} />\r\n }\r\n\r\n const getClasses = (): string | undefined => {\r\n const classes: string[] = []\r\n if (props.slots?.loadingProps?.disabled) classes.push(mediaPlayerClasses.disabledLoading)\r\n if (props.slots?.disabledBackground) classes.push(mediaPlayerClasses.disabledBackground)\r\n if (status !== EMediaPlayerStatus.Loading && !props.loading && streamUrl) {\r\n classes.push('loaded')\r\n }\r\n return classes.length > 0 ? classes.join(' ') : undefined\r\n }\r\n\r\n return (\r\n <WrapPlayer className={getClasses()}>\r\n <WrapVideo sx={{ zIndex: 3 }}>\r\n {streamUrl && (\r\n <VideoPlayerCore\r\n ref={ref}\r\n className='player'\r\n src={streamUrl}\r\n mediaMetadata={props.mediaMetadata}\r\n {...props.slotMedia}\r\n controls={props.slotMedia?.controls}\r\n />\r\n )}\r\n </WrapVideo>\r\n <Fade in={(status === EMediaPlayerStatus.Loading || props.loading) && props.slots?.loadingProps?.disabled !== true}>\r\n <WrapVideo>{renderLoading()}</WrapVideo>\r\n </Fade>\r\n <Fade in={status === EMediaPlayerStatus.Error && !props.loading} unmountOnExit>\r\n <WrapVideo>\r\n <img src='images/video-error.webp' alt='video-error' style={{ width: '100%', height: '100%' }} />\r\n </WrapVideo>\r\n </Fade>\r\n </WrapPlayer>\r\n )\r\n})\r\n\r\nexport default React.memo(MediaPlayerVideo)\r\n\r\nconst WrapPlayer = styled(Box)({\r\n '--mp-core1-color-main': '#ed4229',\r\n '--mp-core1-color-text': '#fff',\r\n '--mp-core1-icon-size': '34px',\r\n position: 'relative',\r\n aspectRatio: '16/9',\r\n borderRadius: '6px',\r\n overflow: 'hidden',\r\n '&.loaded': {\r\n background: '#000',\r\n boxShadow: 'rgba(0, 0, 0, 0.24) 0px 3px 8px'\r\n },\r\n [`&.${mediaPlayerClasses.disabledBackground}`]: {\r\n background: 'unset'\r\n }\r\n})\r\n\r\nconst WrapVideo = styled(Box)({\r\n '--plyr-color-main': '#ed4229',\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n zIndex: 2,\r\n '.MPCore1-root': {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n})\r\n"],"names":["styled","Box","_defineProperty","position","aspectRatio","borderRadius","overflow","background","boxShadow","concat","top","left","width","height","zIndex"],"mappings":"mNA4EmBA,EAAOC,EAAPD,CAAWE,EAAA,CAC5B,wBAAyB,UACzB,wBAAyB,OACzB,uBAAwB,OACxBC,SAAU,WACVC,YAAa,OACbC,aAAc,MACdC,SAAU,SACV,WAAY,CACVC,WAAY,OACZC,UAAW,oCACZ,KAAAC,OAnEmB,uBAoE4B,CAC9CF,WAAY,WAIEP,EAAOC,EAAPD,CAAY,CAC5B,oBAAqB,UACrBG,SAAU,WACVO,IAAK,EACLC,KAAM,EACNC,MAAO,OACPC,OAAQ,OACRC,OAAQ,EACR,gBAAiB,CACfF,MAAO,OACPC,OAAQ"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as o,slicedToArray as r,objectSpread2 as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as i,jsx as n}from"react/jsx-runtime";import{useState as t}from"react";import{styled as a,Accordion as m,accordionSummaryClasses as l,Box as p,Typography as d,AccordionSummary as c,Badge as s,IconButton as u,AccordionDetails as g}from"@mui/material";import f from"@mui/icons-material/Edit";import x from"@mui/icons-material/ExpandMore";import h from"@mui/icons-material/FolderOutlined";import{DeleteButton as b}from"./button.delete.js";import{InlineEditing as y}from"./inline-editing.js";import{mediaRightStoreOptions as v}from"../configs.js";import"../../components/buttons.js";import{NoDataPanel as P}from"../../components/no-data-panel.js";var j=function(o){var a,m=t(!1),l=r(m,2),p=l[0],d=l[1];return i(k,e(e({component:"div"},o.accordionProps),{},{sx:e({my:"0 !important"},null===(a=o.accordionProps)||void 0===a?void 0:a.sx),children:[n(c,e(e({component:"div",expandIcon:n(x,{})},o.accordionSummaryProps),{},{children:i(W,{children:[n(s,{badgeContent:o.group.items.length,color:"primary",children:n(h,{fontSize:"small"})}),i(y,{isEdit:p,setShowEdit:d,onSubmit:function(r){o.onEditGroup(e(e({},o.group),{},{name:r})),d(!1)},defaultValue:o.group.name,textField:{inputProps:{maxLength:v.MAX_NAME_GROUP},sx:{flex:1,minWidth:0,"& .MuiOutlinedInput-root":{height:"32px"}}},sxForm:{flex:1},children:[n(I,{variant:"body2",noWrap:!0,title:o.group.name,children:o.group.name}),n(u,{size:"small",onClick:function(o){o.stopPropagation(),d(!0)},color:"success",children:n(f,{fontSize:"small"})}),n(b,{onDelete:function(){return o.onDeleteGroup(o.group.id)},size:"small"})]},o.group.id+o.group.name+p)]})})),n(g,e(e({},o.accordionDetailsProps),{},{children:o.group.items.length>0?o.group.items.map(function(r){return o.renderItem?o.renderItem(r):null}):n(P,{title:"No media in this playlist",sx:{flex:1}})}))]}))},k=a(m)(o({backgroundColor:"transparent",boxShadow:"none",backgroundImage:"none","&:before":{display:"none"},"&.Mui-expanded":{margin:0}},".".concat(l.root),o({position:"sticky",top:0,zIndex:1,background:"rgba(var(--color-bg-rba),0.7)",backdropFilter:"blur(500px)",WebkitBackdropFilter:"blur(500px)",borderRadius:"12px",minWidth:0},"& .".concat(l.content),{minWidth:0,margin:0}))),W=a(p)(function(o){return{display:"flex",alignItems:"center",flex:1,gap:o.theme.spacing(1),minWidth:0}}),I=a(d)(function(o){var r=o.theme;return{fontWeight:600,flex:1,minWidth:0,color:r.palette.text.primary,marginLeft:r.spacing(1)}});export{W as ItemBox,I as ItemTitle,j as MediaGroupAccordion,k as PlaylistAccordion};
1
+ import{defineProperty as o,slicedToArray as r,objectSpread2 as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as i,jsx as n}from"react/jsx-runtime";import{useState as t}from"react";import{styled as a,Accordion as m,accordionSummaryClasses as l,Box as p,Typography as d,AccordionSummary as c,Badge as s,IconButton as u,AccordionDetails as g}from"@mui/material";import f from"@mui/icons-material/Edit";import x from"@mui/icons-material/ExpandMore";import h from"@mui/icons-material/FolderOutlined";import{DeleteButton as b}from"./button.delete.js";import{InlineEditing as y}from"./inline-editing.js";import{mediaRightStoreOptions as v}from"../configs.js";import{NoDataPanel as P}from"../../components/no-data-panel.js";var k=function(o){var a,m=t(!1),l=r(m,2),p=l[0],d=l[1];return i(W,e(e({component:"div"},o.accordionProps),{},{sx:e({my:"0 !important"},null===(a=o.accordionProps)||void 0===a?void 0:a.sx),children:[n(c,e(e({component:"div",expandIcon:n(x,{})},o.accordionSummaryProps),{},{children:i(j,{children:[n(s,{badgeContent:o.group.items.length,color:"primary",children:n(h,{fontSize:"small"})}),i(y,{isEdit:p,setShowEdit:d,onSubmit:function(r){o.onEditGroup(e(e({},o.group),{},{name:r})),d(!1)},defaultValue:o.group.name,textField:{inputProps:{maxLength:v.MAX_NAME_GROUP},sx:{flex:1,minWidth:0,"& .MuiOutlinedInput-root":{height:"32px"}}},sxForm:{flex:1},children:[n(I,{variant:"body2",noWrap:!0,title:o.group.name,children:o.group.name}),n(u,{size:"small",onClick:function(o){o.stopPropagation(),d(!0)},color:"success",children:n(f,{fontSize:"small"})}),n(b,{onDelete:function(){return o.onDeleteGroup(o.group.id)},size:"small"})]},o.group.id+o.group.name+p)]})})),n(g,e(e({},o.accordionDetailsProps),{},{children:o.group.items.length>0?o.group.items.map(function(r){return o.renderItem?o.renderItem(r):null}):n(P,{title:"No media in this playlist",sx:{flex:1}})}))]}))},W=a(m)(o({backgroundColor:"transparent",boxShadow:"none",backgroundImage:"none","&:before":{display:"none"},"&.Mui-expanded":{margin:0}},".".concat(l.root),o({position:"sticky",top:0,zIndex:1,background:"rgba(var(--color-bg-rba),0.7)",backdropFilter:"blur(500px)",WebkitBackdropFilter:"blur(500px)",borderRadius:"12px",minWidth:0},"& .".concat(l.content),{minWidth:0,margin:0}))),j=a(p)(function(o){return{display:"flex",alignItems:"center",flex:1,gap:o.theme.spacing(1),minWidth:0}}),I=a(d)(function(o){var r=o.theme;return{fontWeight:600,flex:1,minWidth:0,color:r.palette.text.primary,marginLeft:r.spacing(1)}});export{j as ItemBox,I as ItemTitle,k as MediaGroupAccordion,W as PlaylistAccordion};
2
2
  //# sourceMappingURL=media-group-accordion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media-group-accordion.js","sources":["../../../src/media-right/media-widget/media-group-accordion.tsx"],"sourcesContent":["// imports\r\nimport { useState } from 'react'\r\nimport { Accordion, AccordionSummary, AccordionDetails, Box, Typography, IconButton, styled, accordionSummaryClasses, Badge } from '@mui/material'\r\nimport EditIcon from '@mui/icons-material/Edit'\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\r\nimport FolderOutlinedIcon from '@mui/icons-material/FolderOutlined'\r\nimport { DeleteButton } from './button.delete'\r\nimport { InlineEditing } from './inline-editing'\r\nimport { mediaRightStoreOptions } from '../configs'\r\nimport { NoDataPanel } from '../../components'\r\n// types\r\nimport type { ComponentType, FC, MouseEvent } from 'react'\r\nimport type { AccordionProps, AccordionDetailsProps, AccordionSummaryProps, BoxProps, TypographyProps } from '@mui/material'\r\nimport type { IMediaRightGroup, IMediaRightItem } from '../types'\r\n\r\nexport interface IMediaGroupAccordionProps {\r\n group: IMediaRightGroup\r\n accordionProps?: Partial<AccordionProps>\r\n accordionSummaryProps?: Partial<AccordionSummaryProps>\r\n accordionDetailsProps?: Partial<AccordionDetailsProps>\r\n renderItem?: (item: IMediaRightItem) => React.ReactNode\r\n onEditGroup: (group: IMediaRightGroup) => void\r\n onDeleteGroup: (groupId: string) => void\r\n onDeleteMedia: (groupId: string, mediaId: string) => void\r\n}\r\n\r\nexport const MediaGroupAccordion: FC<IMediaGroupAccordionProps> = (props) => {\r\n const [isEditing, setIsEditing] = useState(false)\r\n\r\n const handleSaveEdit = (value: string) => {\r\n props.onEditGroup({ ...props.group, name: value })\r\n setIsEditing(false)\r\n }\r\n\r\n const handleEditClick = (e: MouseEvent) => {\r\n e.stopPropagation()\r\n setIsEditing(true)\r\n }\r\n\r\n return (\r\n <PlaylistAccordion component='div' {...props.accordionProps} sx={{ my: '0 !important', ...props.accordionProps?.sx }}>\r\n <AccordionSummary component='div' expandIcon={<ExpandMoreIcon />} {...props.accordionSummaryProps}>\r\n <ItemBox>\r\n <Badge badgeContent={props.group.items.length} color='primary'>\r\n <FolderOutlinedIcon fontSize='small' />\r\n </Badge>\r\n <InlineEditing\r\n key={props.group.id + props.group.name + isEditing}\r\n isEdit={isEditing}\r\n setShowEdit={setIsEditing}\r\n onSubmit={handleSaveEdit}\r\n defaultValue={props.group.name}\r\n textField={{\r\n inputProps: { maxLength: mediaRightStoreOptions.MAX_NAME_GROUP },\r\n sx: { flex: 1, minWidth: 0, '& .MuiOutlinedInput-root': { height: '32px' } }\r\n }}\r\n sxForm={{ flex: 1 }}\r\n >\r\n <ItemTitle variant='body2' noWrap title={props.group.name}>\r\n {props.group.name}\r\n </ItemTitle>\r\n {/* <Chip sx={{ fontSize: '12px' }} label={`${props.group.items.length} items`} size='small' /> */}\r\n <IconButton size='small' onClick={handleEditClick} color='success'>\r\n <EditIcon fontSize='small' />\r\n </IconButton>\r\n <DeleteButton onDelete={() => props.onDeleteGroup(props.group.id)} size='small' />\r\n </InlineEditing>\r\n </ItemBox>\r\n </AccordionSummary>\r\n <AccordionDetails {...props.accordionDetailsProps}>\r\n {props.group.items.length > 0 ? (\r\n props.group.items.map((item) => (props.renderItem ? props.renderItem(item) : null))\r\n ) : (\r\n <NoDataPanel title={'No media in this playlist'} sx={{ flex: 1 }} />\r\n )}\r\n </AccordionDetails>\r\n </PlaylistAccordion>\r\n )\r\n}\r\n\r\nexport const PlaylistAccordion: ComponentType<AccordionProps> = styled(Accordion)({\r\n backgroundColor: 'transparent',\r\n boxShadow: 'none',\r\n backgroundImage: 'none',\r\n '&:before': { display: 'none' },\r\n '&.Mui-expanded': { margin: 0 },\r\n [`.${accordionSummaryClasses.root}`]: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1,\r\n background: 'rgba(var(--color-bg-rba),0.7)',\r\n backdropFilter: 'blur(500px)',\r\n WebkitBackdropFilter: 'blur(500px)',\r\n borderRadius: '12px',\r\n minWidth: 0,\r\n [`& .${accordionSummaryClasses.content}`]: {\r\n minWidth: 0,\r\n margin: 0\r\n }\r\n }\r\n})\r\n\r\nexport const ItemBox: ComponentType<BoxProps> = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n flex: 1,\r\n gap: theme.spacing(1),\r\n minWidth: 0\r\n}))\r\n\r\nexport const ItemTitle: ComponentType<TypographyProps> = styled(Typography)(({ theme }) => ({\r\n fontWeight: 600,\r\n flex: 1,\r\n minWidth: 0,\r\n color: theme.palette.text.primary,\r\n marginLeft: theme.spacing(1)\r\n}))\r\n"],"names":["MediaGroupAccordion","props","_props$accordionProps","_useState","useState","_useState2","_slicedToArray","isEditing","setIsEditing","_jsxs","PlaylistAccordion","_objectSpread","component","accordionProps","sx","my","_jsx","AccordionSummary","expandIcon","ExpandMoreIcon","accordionSummaryProps","children","ItemBox","Badge","badgeContent","group","items","length","color","FolderOutlinedIcon","fontSize","InlineEditing","isEdit","setShowEdit","onSubmit","value","onEditGroup","name","defaultValue","textField","inputProps","maxLength","mediaRightStoreOptions","MAX_NAME_GROUP","flex","minWidth","height","sxForm","ItemTitle","variant","noWrap","title","IconButton","size","onClick","e","stopPropagation","EditIcon","DeleteButton","onDelete","onDeleteGroup","id","AccordionDetails","accordionDetailsProps","map","item","renderItem","NoDataPanel","styled","Accordion","_defineProperty","backgroundColor","boxShadow","backgroundImage","display","margin","concat","accordionSummaryClasses","root","position","top","zIndex","background","backdropFilter","WebkitBackdropFilter","borderRadius","content","Box","_ref","alignItems","gap","theme","spacing","Typography","_ref2","fontWeight","palette","text","primary","marginLeft"],"mappings":"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"}
1
+ {"version":3,"file":"media-group-accordion.js","sources":["../../../src/media-right/media-widget/media-group-accordion.tsx"],"sourcesContent":["// imports\r\nimport { useState } from 'react'\r\nimport { Accordion, AccordionSummary, AccordionDetails, Box, Typography, IconButton, styled, accordionSummaryClasses, Badge } from '@mui/material'\r\nimport EditIcon from '@mui/icons-material/Edit'\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\r\nimport FolderOutlinedIcon from '@mui/icons-material/FolderOutlined'\r\nimport { DeleteButton } from './button.delete'\r\nimport { InlineEditing } from './inline-editing'\r\nimport { mediaRightStoreOptions } from '../configs'\r\nimport { NoDataPanel } from '../../components'\r\n// types\r\nimport type { ComponentType, FC, MouseEvent } from 'react'\r\nimport type { AccordionProps, AccordionDetailsProps, AccordionSummaryProps, BoxProps, TypographyProps } from '@mui/material'\r\nimport type { IMediaRightGroup, IMediaRightItem } from '../types'\r\n\r\nexport interface IMediaGroupAccordionProps {\r\n group: IMediaRightGroup\r\n accordionProps?: Partial<AccordionProps>\r\n accordionSummaryProps?: Partial<AccordionSummaryProps>\r\n accordionDetailsProps?: Partial<AccordionDetailsProps>\r\n renderItem?: (item: IMediaRightItem) => React.ReactNode\r\n onEditGroup: (group: IMediaRightGroup) => void\r\n onDeleteGroup: (groupId: string) => void\r\n onDeleteMedia: (groupId: string, mediaId: string) => void\r\n}\r\n\r\nexport const MediaGroupAccordion: FC<IMediaGroupAccordionProps> = (props) => {\r\n const [isEditing, setIsEditing] = useState(false)\r\n\r\n const handleSaveEdit = (value: string) => {\r\n props.onEditGroup({ ...props.group, name: value })\r\n setIsEditing(false)\r\n }\r\n\r\n const handleEditClick = (e: MouseEvent) => {\r\n e.stopPropagation()\r\n setIsEditing(true)\r\n }\r\n\r\n return (\r\n <PlaylistAccordion component='div' {...props.accordionProps} sx={{ my: '0 !important', ...props.accordionProps?.sx }}>\r\n <AccordionSummary component='div' expandIcon={<ExpandMoreIcon />} {...props.accordionSummaryProps}>\r\n <ItemBox>\r\n <Badge badgeContent={props.group.items.length} color='primary'>\r\n <FolderOutlinedIcon fontSize='small' />\r\n </Badge>\r\n <InlineEditing\r\n key={props.group.id + props.group.name + isEditing}\r\n isEdit={isEditing}\r\n setShowEdit={setIsEditing}\r\n onSubmit={handleSaveEdit}\r\n defaultValue={props.group.name}\r\n textField={{\r\n inputProps: { maxLength: mediaRightStoreOptions.MAX_NAME_GROUP },\r\n sx: { flex: 1, minWidth: 0, '& .MuiOutlinedInput-root': { height: '32px' } }\r\n }}\r\n sxForm={{ flex: 1 }}\r\n >\r\n <ItemTitle variant='body2' noWrap title={props.group.name}>\r\n {props.group.name}\r\n </ItemTitle>\r\n {/* <Chip sx={{ fontSize: '12px' }} label={`${props.group.items.length} items`} size='small' /> */}\r\n <IconButton size='small' onClick={handleEditClick} color='success'>\r\n <EditIcon fontSize='small' />\r\n </IconButton>\r\n <DeleteButton onDelete={() => props.onDeleteGroup(props.group.id)} size='small' />\r\n </InlineEditing>\r\n </ItemBox>\r\n </AccordionSummary>\r\n <AccordionDetails {...props.accordionDetailsProps}>\r\n {props.group.items.length > 0 ? (\r\n props.group.items.map((item) => (props.renderItem ? props.renderItem(item) : null))\r\n ) : (\r\n <NoDataPanel title={'No media in this playlist'} sx={{ flex: 1 }} />\r\n )}\r\n </AccordionDetails>\r\n </PlaylistAccordion>\r\n )\r\n}\r\n\r\nexport const PlaylistAccordion: ComponentType<AccordionProps> = styled(Accordion)({\r\n backgroundColor: 'transparent',\r\n boxShadow: 'none',\r\n backgroundImage: 'none',\r\n '&:before': { display: 'none' },\r\n '&.Mui-expanded': { margin: 0 },\r\n [`.${accordionSummaryClasses.root}`]: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1,\r\n background: 'rgba(var(--color-bg-rba),0.7)',\r\n backdropFilter: 'blur(500px)',\r\n WebkitBackdropFilter: 'blur(500px)',\r\n borderRadius: '12px',\r\n minWidth: 0,\r\n [`& .${accordionSummaryClasses.content}`]: {\r\n minWidth: 0,\r\n margin: 0\r\n }\r\n }\r\n})\r\n\r\nexport const ItemBox: ComponentType<BoxProps> = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n flex: 1,\r\n gap: theme.spacing(1),\r\n minWidth: 0\r\n}))\r\n\r\nexport const ItemTitle: ComponentType<TypographyProps> = styled(Typography)(({ theme }) => ({\r\n fontWeight: 600,\r\n flex: 1,\r\n minWidth: 0,\r\n color: theme.palette.text.primary,\r\n marginLeft: theme.spacing(1)\r\n}))\r\n"],"names":["MediaGroupAccordion","props","_props$accordionProps","_useState","useState","_useState2","_slicedToArray","isEditing","setIsEditing","_jsxs","PlaylistAccordion","_objectSpread","component","accordionProps","sx","my","_jsx","AccordionSummary","expandIcon","ExpandMoreIcon","accordionSummaryProps","children","ItemBox","Badge","badgeContent","group","items","length","color","FolderOutlinedIcon","fontSize","InlineEditing","isEdit","setShowEdit","onSubmit","value","onEditGroup","name","defaultValue","textField","inputProps","maxLength","mediaRightStoreOptions","MAX_NAME_GROUP","flex","minWidth","height","sxForm","ItemTitle","variant","noWrap","title","IconButton","size","onClick","e","stopPropagation","EditIcon","DeleteButton","onDelete","onDeleteGroup","id","AccordionDetails","accordionDetailsProps","map","item","renderItem","NoDataPanel","styled","Accordion","_defineProperty","backgroundColor","boxShadow","backgroundImage","display","margin","concat","accordionSummaryClasses","root","position","top","zIndex","background","backdropFilter","WebkitBackdropFilter","borderRadius","content","Box","_ref","alignItems","gap","theme","spacing","Typography","_ref2","fontWeight","palette","text","primary","marginLeft"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{createClass as t,classCallCheck as e}from"../_virtual/_rollupPluginBabelHelpers.js";import{tryParseObject as n}from"dinocollab-core/utils";import{ETypeContent as r}from"./types.js";var o="1.0.0",s={type:r.Template,version:o,html:""},i=function(){return t(function t(n){e(this,t),this.rawContent=n},[{key:"parseContent",value:function(){var t=n(this.rawContent,s);return"version"in t&&t.version===o?t:s}},{key:"getContentByVersion",value:function(){return this.parseContent()}}])}();export{i as NotifyContentConverter,s as defaultContentMetaData};
2
+ //# sourceMappingURL=content-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-converter.js","sources":["../../src/notification/content-converter.tsx"],"sourcesContent":["import { tryParseObject } from 'dinocollab-core/utils'\r\nimport { ETypeContent } from './types'\r\n\r\nconst CURRENT_VERSION = '1.0.0'\r\n\r\nexport interface IContentMetaData {\r\n type: ETypeContent\r\n version?: string\r\n html?: string\r\n}\r\n\r\nexport const defaultContentMetaData: IContentMetaData = {\r\n type: ETypeContent.Template,\r\n version: CURRENT_VERSION,\r\n html: ''\r\n}\r\n\r\nexport class NotifyContentConverter {\r\n private rawContent: string\r\n\r\n constructor(content: string) {\r\n this.rawContent = content\r\n }\r\n\r\n private parseContent(): IContentMetaData {\r\n const obj = tryParseObject<IContentMetaData>(this.rawContent, defaultContentMetaData)\r\n if ('version' in obj && obj.version === CURRENT_VERSION) return obj\r\n return defaultContentMetaData\r\n }\r\n\r\n getContentByVersion() {\r\n const obj = this.parseContent()\r\n return obj\r\n }\r\n}\r\n"],"names":["CURRENT_VERSION","defaultContentMetaData","type","ETypeContent","Template","version","html","NotifyContentConverter","_createClass","content","_classCallCheck","this","rawContent","key","value","obj","tryParseObject","parseContent"],"mappings":"4LAGA,IAAMA,EAAkB,QAQXC,EAA2C,CACtDC,KAAMC,EAAaC,SACnBC,QAASL,EACTM,KAAM,IAGKC,EAAsB,WAKhC,OAAAC,EAFD,SAAAD,EAAYE,GAAeC,OAAAH,GACzBI,KAAKC,WAAaH,CACpB,EAAC,CAAA,CAAAI,IAAA,eAAAC,MAEO,WACN,IAAMC,EAAMC,EAAiCL,KAAKC,WAAYX,GAC9D,MAAI,YAAac,GAAOA,EAAIV,UAAYL,EAAwBe,EACzDd,CACT,GAAC,CAAAY,IAAA,sBAAAC,MAED,WAEE,OADYH,KAAKM,cAEnB,IAAC,CAhBgC"}
@@ -1,2 +1,2 @@
1
- export{NotificationWidget,createNotificationWidget}from"./widget.js";export{EBtnPopupId,ETypeContent}from"./types.js";export{NotifyDetail}from"./notify-detail.js";
1
+ export{NotificationWidget,createNotificationWidget}from"./widget.js";export{EBtnPopupId,ETypeContent}from"./types.js";export{NotifyDetail}from"./notify-detail.js";export{NotifyContentConverter,defaultContentMetaData}from"./content-converter.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{inherits as e,createClass as t,classCallCheck as r,callSuper as n,defineProperty as o,asyncToGenerator as a,regenerator as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l,jsxs as s}from"react/jsx-runtime";import{Component as c}from"react";import{styled as d,Box as p,CircularProgress as u}from"@mui/material";import{errorMessageHandler as f}from"./hook.js";import{NotifyContentConverter as h}from"./class.config.js";import"react-quill/dist/quill.snow.css";var m=function(){function d(e){var t;return r(this,d),t=n(this,d,[e]),o(t,"abortController",null),o(t,"fetchDetailIfNeeded",a(i().m(function e(){var r,n,o,a,l;return i().w(function(e){for(;;)switch(e.p=e.n){case 0:if(r=t.props.data,t.props.fetchDetail){e.n=1;break}return e.a(2);case 1:if(!(t.state.detailData||t.state.loading||t.state.error)){e.n=2;break}return e.a(2);case 2:return t.setState({loading:!0}),e.p=3,e.n=4,t.props.fetchDetail(r.Id,null===(n=t.abortController)||void 0===n?void 0:n.signal);case 4:(o=e.v)?t.setState({detailData:o,loading:!1,error:!1}):t.setState({loading:!1,error:!0}),e.n=6;break;case 5:e.p=5,l=e.v,a=f(l,{message:"Error fetching notification detail"}),a.isAbortError||t.setState({loading:!1,error:!0});case 6:return e.a(2)}},e,null,[[3,5]])}))),o(t,"handleRetry",function(){t.setState({error:!1},function(){t.fetchDetailIfNeeded()})}),t.state={detailData:null,loading:!1,error:!1},t}return e(d,c),t(d,[{key:"componentDidMount",value:function(){this.abortController=new AbortController,this.fetchDetailIfNeeded()}},{key:"componentWillUnmount",value:function(){var e;null===(e=this.abortController)||void 0===e||e.abort()}},{key:"render",value:function(){var e=this.props.data,t=this.state,r=t.loading,n=t.error,o=t.detailData;if(r)return l(g,{children:l(u,{})});if(n&&!e.Content)return s(v,{children:[l(C,{children:"Unable to load notification content. Please try again later."}),this.props.onClose&&l(y,{onClick:this.handleRetry,children:"Close"})]});var a,i=o||e,c=new h(i.Content),d=c.getContentByVersion();"development"===process.env.NODE_ENV&&(console.log("[NotifyDetail] Content:",null===(a=i.Content)||void 0===a?void 0:a.substring(0,100)),console.log("[NotifyDetail] Parsed type:",d.type));return c.renderComponent({data:i,onRead:this.props.onRead,onClose:this.props.onClose,getterId:this.props.getterId})}}])}(),g=d(p)({display:"flex",justifyContent:"center",alignItems:"center",minHeight:"350px",width:"100%"}),v=d(p)(function(e){var t=e.theme;return{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",minHeight:"350px",width:"100%",padding:t.spacing(3),gap:t.spacing(2)}}),C=d(p)(function(e){return{color:e.theme.palette.error.main,textAlign:"center",fontSize:"14px"}}),y=d("button")(function(e){var t=e.theme;return{padding:"8px 16px",backgroundColor:t.palette.primary.main,color:t.palette.primary.contrastText,border:"none",borderRadius:t.shape.borderRadius,cursor:"pointer",fontSize:"14px","&:hover":{opacity:.9}}});export{m as NotifyDetail,m as default};
1
+ import{inherits as t,createClass as e,objectSpread2 as r,classCallCheck as n,callSuper as o,defineProperty as a,asyncToGenerator as i,regenerator as l}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{Component as d}from"react";import{styled as u,Box as p,CircularProgress as f}from"@mui/material";import{errorMessageHandler as m}from"./hook.js";import{NotifyContentConverter as h}from"./content-converter.js";import{ETypeContent as g}from"./types.js";import C from"./notify-detail.custom.js";import y from"./notify-detail.default.js";import"react-quill/dist/quill.snow.css";var v=function(){function u(t){var e;return n(this,u),e=o(this,u,[t]),a(e,"abortController",null),a(e,"fetchDetailIfNeeded",i(l().m(function t(){var r,n,o,a,i;return l().w(function(t){for(;;)switch(t.p=t.n){case 0:if(r=e.props.data,e.props.fetchDetail){t.n=1;break}return t.a(2);case 1:if(!(e.state.detailData||e.state.loading||e.state.error)){t.n=2;break}return t.a(2);case 2:return e.setState({loading:!0}),t.p=3,t.n=4,e.props.fetchDetail(r.Id,null===(n=e.abortController)||void 0===n?void 0:n.signal);case 4:(o=t.v)?e.setState({detailData:o,loading:!1,error:!1}):e.setState({loading:!1,error:!0}),t.n=6;break;case 5:t.p=5,i=t.v,a=m(i,{message:"Error fetching notification detail"}),a.isAbortError||e.setState({loading:!1,error:!0});case 6:return t.a(2)}},t,null,[[3,5]])}))),a(e,"handleRetry",function(){e.setState({error:!1},function(){e.fetchDetailIfNeeded()})}),e.state={detailData:null,loading:!1,error:!1},e}return t(u,d),e(u,[{key:"componentDidMount",value:function(){this.abortController=new AbortController,this.fetchDetailIfNeeded()}},{key:"componentWillUnmount",value:function(){var t;null===(t=this.abortController)||void 0===t||t.abort()}},{key:"render",value:function(){var t=this.props,e=t.data,n=t.onRead,o=t.onClose,a=t.getterId,i=this.state,l=i.loading,d=i.error;if(i.detailData,l)return s(b,{children:s(f,{})});if(d&&!e.Content)return c(x,{children:[s(D,{children:"Unable to load notification content. Please try again later."}),this.props.onClose&&s(j,{onClick:this.handleRetry,children:"Close"})]});var u=new h(e.Content).getContentByVersion();switch(u.type){case g.Custom:return s(C,r(r({},{data:e,onRead:n,onClose:o,getterId:a}),{},{html:u.html||""}));case g.Template:default:return s(y,r(r({},{data:e,onRead:n,onClose:o,getterId:a}),{},{html:u.html||""}))}}}])}(),b=u(p)({display:"flex",justifyContent:"center",alignItems:"center",minHeight:"350px",width:"100%"}),x=u(p)(function(t){var e=t.theme;return{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",minHeight:"350px",width:"100%",padding:e.spacing(3),gap:e.spacing(2)}}),D=u(p)(function(t){return{color:t.theme.palette.error.main,textAlign:"center",fontSize:"14px"}}),j=u("button")(function(t){var e=t.theme;return{padding:"8px 16px",backgroundColor:e.palette.primary.main,color:e.palette.primary.contrastText,border:"none",borderRadius:e.shape.borderRadius,cursor:"pointer",fontSize:"14px","&:hover":{opacity:.9}}});export{v as NotifyDetail,v as default};
2
2
  //# sourceMappingURL=notify-detail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notify-detail.js","sources":["../../src/notification/notify-detail.tsx"],"sourcesContent":["import { Component } from 'react'\r\nimport { Box, CircularProgress, styled } from '@mui/material'\r\nimport { errorMessageHandler } from './hook'\r\nimport { NotifyContentConverter } from './class.config'\r\nimport { INotification, FetchDetailFunction, INotificationPropsDef } from './types'\r\n// Styles\r\nimport 'react-quill/dist/quill.snow.css'\r\n\r\nexport interface INotifyDetailProps extends INotificationPropsDef {\r\n data: INotification\r\n fetchDetail?: FetchDetailFunction\r\n}\r\n\r\ninterface IState {\r\n detailData: INotification | null\r\n loading: boolean\r\n error: boolean\r\n}\r\n\r\nexport class NotifyDetail extends Component<INotifyDetailProps, IState> {\r\n private abortController: AbortController | null = null\r\n\r\n constructor(props: INotifyDetailProps) {\r\n super(props)\r\n this.state = { detailData: null, loading: false, error: false }\r\n }\r\n\r\n componentDidMount() {\r\n this.abortController = new AbortController()\r\n this.fetchDetailIfNeeded()\r\n }\r\n\r\n componentWillUnmount() {\r\n this.abortController?.abort()\r\n }\r\n\r\n fetchDetailIfNeeded = async () => {\r\n const item = this.props.data\r\n\r\n // Skip if no fetchDetail function\r\n if (!this.props.fetchDetail) {\r\n return\r\n }\r\n\r\n // Skip if already fetched, loading, or has error\r\n if (this.state.detailData || this.state.loading || this.state.error) {\r\n return\r\n }\r\n\r\n // Start loading\r\n this.setState({ loading: true })\r\n\r\n try {\r\n const detail = await this.props.fetchDetail(item.Id, this.abortController?.signal)\r\n\r\n if (detail) {\r\n // Fetch successful\r\n this.setState({ detailData: detail, loading: false, error: false })\r\n } else {\r\n // Fetch returned null\r\n this.setState({ loading: false, error: true })\r\n }\r\n } catch (error) {\r\n const { isAbortError } = errorMessageHandler(error, { message: 'Error fetching notification detail' })\r\n if (!isAbortError) {\r\n // Error while fetching\r\n this.setState({ loading: false, error: true })\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const { data } = this.props\r\n const { loading, error, detailData } = this.state\r\n\r\n if (loading) {\r\n return (\r\n <LoadingWrapper>\r\n <CircularProgress />\r\n </LoadingWrapper>\r\n )\r\n }\r\n\r\n // If error and no content from original data, show fallback\r\n if (error && !data.Content) {\r\n return (\r\n <ErrorWrapper>\r\n <ErrorMessage>Unable to load notification content. Please try again later.</ErrorMessage>\r\n {this.props.onClose && <RetryButton onClick={this.handleRetry}>Close</RetryButton>}\r\n </ErrorWrapper>\r\n )\r\n }\r\n\r\n // Use detail data if available, otherwise use original data\r\n const detailItem = detailData || data\r\n const notifyContent = new NotifyContentConverter(detailItem.Content)\r\n const parsedConfig = notifyContent.getContentByVersion()\r\n\r\n // Debug logging\r\n if (process.env.NODE_ENV === 'development') {\r\n console.log('[NotifyDetail] Content:', detailItem.Content?.substring(0, 100))\r\n console.log('[NotifyDetail] Parsed type:', parsedConfig.type)\r\n }\r\n\r\n return notifyContent.renderComponent({\r\n data: detailItem,\r\n onRead: this.props.onRead,\r\n onClose: this.props.onClose,\r\n getterId: this.props.getterId\r\n })\r\n }\r\n\r\n handleRetry = () => {\r\n // Clear error state and retry\r\n this.setState({ error: false }, () => {\r\n this.fetchDetailIfNeeded()\r\n })\r\n }\r\n}\r\n\r\nexport default NotifyDetail\r\n\r\nconst LoadingWrapper = styled(Box)({\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n minHeight: '350px',\r\n width: '100%'\r\n})\r\n\r\nconst ErrorWrapper = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n minHeight: '350px',\r\n width: '100%',\r\n padding: theme.spacing(3),\r\n gap: theme.spacing(2)\r\n}))\r\n\r\nconst ErrorMessage = styled(Box)(({ theme }) => ({\r\n color: theme.palette.error.main,\r\n textAlign: 'center',\r\n fontSize: '14px'\r\n}))\r\n\r\nconst RetryButton = styled('button')(({ theme }) => ({\r\n padding: '8px 16px',\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.primary.contrastText,\r\n border: 'none',\r\n borderRadius: theme.shape.borderRadius,\r\n cursor: 'pointer',\r\n fontSize: '14px',\r\n '&:hover': {\r\n opacity: 0.9\r\n }\r\n}))\r\n"],"names":["NotifyDetail","props","_this","_classCallCheck","_callSuper","_defineProperty","_asyncToGenerator","_regenerator","m","_callee","item","_this$abortController","detail","_errorMessageHandler","_t","w","_context","p","n","data","fetchDetail","a","state","detailData","loading","error","setState","Id","abortController","signal","v","errorMessageHandler","message","isAbortError","fetchDetailIfNeeded","_inherits","Component","_createClass","key","value","this","AbortController","_this$abortController2","abort","_this$state","_jsx","LoadingWrapper","children","CircularProgress","Content","_jsxs","ErrorWrapper","ErrorMessage","onClose","RetryButton","onClick","handleRetry","_detailItem$Content","detailItem","notifyContent","NotifyContentConverter","parsedConfig","getContentByVersion","process","env","NODE_ENV","console","log","substring","type","renderComponent","onRead","getterId","styled","Box","display","justifyContent","alignItems","minHeight","width","_ref2","theme","flexDirection","padding","spacing","gap","_ref3","color","palette","main","textAlign","fontSize","_ref4","backgroundColor","primary","contrastText","border","borderRadius","shape","cursor","opacity"],"mappings":"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"}
1
+ {"version":3,"file":"notify-detail.js","sources":["../../src/notification/notify-detail.tsx"],"sourcesContent":["import { Component } from 'react'\r\nimport { Box, CircularProgress, styled } from '@mui/material'\r\nimport { errorMessageHandler } from './hook'\r\nimport { NotifyContentConverter } from './content-converter'\r\nimport { INotification, FetchDetailFunction, INotificationPropsDef, ETypeContent } from './types'\r\nimport NotifyDetailCustom from './notify-detail.custom'\r\nimport NotifyDetailDefault from './notify-detail.default'\r\n// Styles\r\nimport 'react-quill/dist/quill.snow.css'\r\n\r\nexport interface INotifyDetailProps extends INotificationPropsDef {\r\n data: INotification\r\n fetchDetail?: FetchDetailFunction\r\n}\r\n\r\ninterface IState {\r\n detailData: INotification | null\r\n loading: boolean\r\n error: boolean\r\n}\r\n\r\nexport class NotifyDetail extends Component<INotifyDetailProps, IState> {\r\n private abortController: AbortController | null = null\r\n\r\n constructor(props: INotifyDetailProps) {\r\n super(props)\r\n this.state = { detailData: null, loading: false, error: false }\r\n }\r\n\r\n componentDidMount() {\r\n this.abortController = new AbortController()\r\n this.fetchDetailIfNeeded()\r\n }\r\n\r\n componentWillUnmount() {\r\n this.abortController?.abort()\r\n }\r\n\r\n fetchDetailIfNeeded = async () => {\r\n const item = this.props.data\r\n\r\n // Skip if no fetchDetail function\r\n if (!this.props.fetchDetail) {\r\n return\r\n }\r\n\r\n // Skip if already fetched, loading, or has error\r\n if (this.state.detailData || this.state.loading || this.state.error) {\r\n return\r\n }\r\n\r\n // Start loading\r\n this.setState({ loading: true })\r\n\r\n try {\r\n const detail = await this.props.fetchDetail(item.Id, this.abortController?.signal)\r\n\r\n if (detail) {\r\n // Fetch successful\r\n this.setState({ detailData: detail, loading: false, error: false })\r\n } else {\r\n // Fetch returned null\r\n this.setState({ loading: false, error: true })\r\n }\r\n } catch (error) {\r\n const { isAbortError } = errorMessageHandler(error, { message: 'Error fetching notification detail' })\r\n if (!isAbortError) {\r\n // Error while fetching\r\n this.setState({ loading: false, error: true })\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const { data, onRead, onClose, getterId } = this.props\r\n const { loading, error, detailData } = this.state\r\n\r\n if (loading) {\r\n return (\r\n <LoadingWrapper>\r\n <CircularProgress />\r\n </LoadingWrapper>\r\n )\r\n }\r\n\r\n // If error and no content from original data, show fallback\r\n if (error && !data.Content) {\r\n return (\r\n <ErrorWrapper>\r\n <ErrorMessage>Unable to load notification content. Please try again later.</ErrorMessage>\r\n {this.props.onClose && <RetryButton onClick={this.handleRetry}>Close</RetryButton>}\r\n </ErrorWrapper>\r\n )\r\n }\r\n\r\n // // Debug logging\r\n // if (process.env.NODE_ENV === 'development') {\r\n // // Use detail data if available, otherwise use original data\r\n // const detailItem = detailData || data\r\n // const notifyContent = new NotifyContentConverter(detailItem.Content)\r\n // const parsedConfig = notifyContent.getContentByVersion()\r\n // console.log('[NotifyDetail] Content:', detailItem.Content?.substring(0, 100))\r\n // console.log('[NotifyDetail] Parsed type:', parsedConfig.type)\r\n // }\r\n\r\n const obj = new NotifyContentConverter(data.Content).getContentByVersion()\r\n switch (obj.type) {\r\n case ETypeContent.Custom:\r\n return <NotifyDetailCustom {...{ data, onRead, onClose, getterId }} html={obj.html || ''} />\r\n case ETypeContent.Template:\r\n default:\r\n return <NotifyDetailDefault {...{ data, onRead, onClose, getterId }} html={obj.html || ''} />\r\n }\r\n }\r\n\r\n handleRetry = () => {\r\n // Clear error state and retry\r\n this.setState({ error: false }, () => {\r\n this.fetchDetailIfNeeded()\r\n })\r\n }\r\n}\r\n\r\nexport default NotifyDetail\r\n\r\nconst LoadingWrapper = styled(Box)({\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n minHeight: '350px',\r\n width: '100%'\r\n})\r\n\r\nconst ErrorWrapper = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n minHeight: '350px',\r\n width: '100%',\r\n padding: theme.spacing(3),\r\n gap: theme.spacing(2)\r\n}))\r\n\r\nconst ErrorMessage = styled(Box)(({ theme }) => ({\r\n color: theme.palette.error.main,\r\n textAlign: 'center',\r\n fontSize: '14px'\r\n}))\r\n\r\nconst RetryButton = styled('button')(({ theme }) => ({\r\n padding: '8px 16px',\r\n backgroundColor: theme.palette.primary.main,\r\n color: theme.palette.primary.contrastText,\r\n border: 'none',\r\n borderRadius: theme.shape.borderRadius,\r\n cursor: 'pointer',\r\n fontSize: '14px',\r\n '&:hover': {\r\n opacity: 0.9\r\n }\r\n}))\r\n"],"names":["NotifyDetail","props","_this","_classCallCheck","_callSuper","_defineProperty","_asyncToGenerator","_regenerator","m","_callee","item","_this$abortController","detail","_errorMessageHandler","_t","w","_context","p","n","data","fetchDetail","a","state","detailData","loading","error","setState","Id","abortController","signal","v","errorMessageHandler","message","isAbortError","fetchDetailIfNeeded","_inherits","Component","_createClass","key","value","this","AbortController","_this$abortController2","abort","_this$props","onRead","onClose","getterId","_this$state","_jsx","LoadingWrapper","children","CircularProgress","Content","_jsxs","ErrorWrapper","ErrorMessage","RetryButton","onClick","handleRetry","obj","NotifyContentConverter","getContentByVersion","type","ETypeContent","Custom","NotifyDetailCustom","_objectSpread","html","Template","NotifyDetailDefault","styled","Box","display","justifyContent","alignItems","minHeight","width","_ref2","theme","flexDirection","padding","spacing","gap","_ref3","color","palette","main","textAlign","fontSize","_ref4","backgroundColor","primary","contrastText","border","borderRadius","shape","cursor","opacity"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"btn.volume.d.ts","sourceRoot":"","sources":["../../../../src/media-player/core/btn.volume.tsx"],"names":[],"mappings":";AAKA,KAAK,iBAAiB,GAAG;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;IAC5C,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB,CAAA;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA8F1C,CAAA;AAED,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"btn.volume.d.ts","sourceRoot":"","sources":["../../../../src/media-player/core/btn.volume.tsx"],"names":[],"mappings":";AAKA,KAAK,iBAAiB,GAAG;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;IAC5C,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,UAAU,EAAE,MAAM,IAAI,CAAA;CACvB,CAAA;AAED,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAwF1C,CAAA;AAED,eAAe,SAAS,CAAA"}
@@ -1,13 +1,14 @@
1
1
  import React from 'react';
2
- interface Props {
2
+ interface IProgressBarProps {
3
3
  bufferedSegments: {
4
4
  left: number;
5
5
  width: number;
6
6
  }[];
7
7
  progress: number;
8
8
  isLoading: boolean;
9
+ hidden?: boolean;
9
10
  onChange?: (value: number) => void;
10
11
  }
11
- declare const ProgressBar: React.FC<Props>;
12
+ declare const ProgressBar: React.FC<IProgressBarProps>;
12
13
  export default ProgressBar;
13
14
  //# sourceMappingURL=progressBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"progressBar.d.ts","sourceRoot":"","sources":["../../../../src/media-player/core/progressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,UAAU,KAAK;IACb,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACnD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AAED,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwFhC,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"progressBar.d.ts","sourceRoot":"","sources":["../../../../src/media-player/core/progressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,UAAU,iBAAiB;IACzB,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACnD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AAED,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAuF5C,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -9,16 +9,17 @@ export interface IControlsConfig {
9
9
  preload?: 'auto' | 'metadata' | 'none';
10
10
  }
11
11
  export declare const defaultControlsConfig: IControlsConfig;
12
- export interface MediaPlayerSlot {
12
+ export interface IVideoPlayerSlots {
13
13
  controls?: IControlsConfig;
14
14
  anotherControls?: React.ReactNode;
15
15
  mediaMetadata?: MediaMetadata;
16
16
  }
17
- interface IProps extends MediaPlayerSlot {
17
+ export interface IVideoPlayerProps extends IVideoPlayerSlots {
18
18
  src?: string;
19
19
  sx?: SxProps<Theme>;
20
20
  className?: string;
21
+ readonly?: boolean;
21
22
  }
22
- declare const MediaPlayerCore: import("react").ForwardRefExoticComponent<IProps & import("react").RefAttributes<HTMLVideoElement>>;
23
- export default MediaPlayerCore;
23
+ declare const VideoPlayerCore: import("react").ForwardRefExoticComponent<IVideoPlayerProps & import("react").RefAttributes<HTMLVideoElement>>;
24
+ export default VideoPlayerCore;
24
25
  //# sourceMappingURL=videoplayer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"videoplayer.d.ts","sourceRoot":"","sources":["../../../../src/media-player/core/videoplayer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAsB,OAAO,EAAE,KAAK,EAA2B,MAAM,eAAe,CAAA;AAsB3F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;CACvC;AAGD,eAAO,MAAM,qBAAqB,EAAE,eAOnC,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AACD,UAAU,MAAO,SAAQ,eAAe;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,QAAA,MAAM,eAAe,qGAyFnB,CAAA;AAEF,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"videoplayer.d.ts","sourceRoot":"","sources":["../../../../src/media-player/core/videoplayer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAsB,OAAO,EAAE,KAAK,EAA2B,MAAM,eAAe,CAAA;AAS3F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;CACvC;AAGD,eAAO,MAAM,qBAAqB,EAAE,eAOnC,CAAA;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,QAAA,MAAM,eAAe,gHAqGnB,CAAA;AAEF,eAAe,eAAe,CAAA"}
@@ -1,8 +1,8 @@
1
1
  import type { FC } from 'react';
2
+ import type { IVideoPlayerProps } from './core/videoplayer';
2
3
  import type { MediaPlayerBaseProps, MediaPlayerBaseSlots } from './types';
3
- import { MediaPlayerSlot } from './core/videoplayer';
4
4
  export interface SlotMediaPlayerMutedProps extends MediaPlayerBaseSlots {
5
- coreProps?: MediaPlayerSlot;
5
+ coreProps?: IVideoPlayerProps;
6
6
  }
7
7
  export interface IMediaPlayerMutedProps extends MediaPlayerBaseProps {
8
8
  slots?: SlotMediaPlayerMutedProps;
@@ -1 +1 @@
1
- {"version":3,"file":"muted.d.ts","sourceRoot":"","sources":["../../../src/media-player/muted.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAIzE,OAAwB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAErE,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,SAAS,CAAC,EAAE,eAAe,CAAA;CAC5B;AACD,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,KAAK,CAAC,EAAE,yBAAyB,CAAA;CAClC;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,sBAAsB,CAiCvD,CAAA;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"muted.d.ts","sourceRoot":"","sources":["../../../src/media-player/muted.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEzE,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,SAAS,CAAC,EAAE,iBAAiB,CAAA;CAC9B;AAED,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,KAAK,CAAC,EAAE,yBAAyB,CAAA;CAClC;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,sBAAsB,CAiCvD,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { MediaPlayerSlot } from './core/videoplayer';
2
+ import { IVideoPlayerSlots } from './core/videoplayer';
3
3
  import type { MediaPlayerBaseProps, MediaPlayerBaseSlots } from './types';
4
4
  export interface MediaPlayerSlotsProps extends MediaPlayerBaseSlots {
5
5
  disabledBackground?: boolean;
@@ -7,7 +7,7 @@ export interface MediaPlayerSlotsProps extends MediaPlayerBaseSlots {
7
7
  }
8
8
  interface IProps extends MediaPlayerBaseProps {
9
9
  slots?: MediaPlayerSlotsProps;
10
- slotMedia?: MediaPlayerSlot;
10
+ slotMedia?: IVideoPlayerSlots;
11
11
  mediaMetadata?: MediaMetadata;
12
12
  }
13
13
  declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<IProps & React.RefAttributes<HTMLVideoElement>>>;
@@ -1 +1 @@
1
- {"version":3,"file":"player.video-stream.d.ts","sourceRoot":"","sources":["../../../src/media-player/player.video-stream.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AAGxC,OAAwB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEzE,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,UAAU,MAAO,SAAQ,oBAAoB;IAC3C,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;;AA0DD,wBAA2C"}
1
+ {"version":3,"file":"player.video-stream.d.ts","sourceRoot":"","sources":["../../../src/media-player/player.video-stream.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AAGxC,OAAwB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAEvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEzE,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,UAAU,MAAO,SAAQ,oBAAoB;IAC3C,KAAK,CAAC,EAAE,qBAAqB,CAAA;IAC7B,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;;AA0DD,wBAA2C"}
@@ -0,0 +1,14 @@
1
+ import { ETypeContent } from './types';
2
+ export interface IContentMetaData {
3
+ type: ETypeContent;
4
+ version?: string;
5
+ html?: string;
6
+ }
7
+ export declare const defaultContentMetaData: IContentMetaData;
8
+ export declare class NotifyContentConverter {
9
+ private rawContent;
10
+ constructor(content: string);
11
+ private parseContent;
12
+ getContentByVersion(): IContentMetaData;
13
+ }
14
+ //# sourceMappingURL=content-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-converter.d.ts","sourceRoot":"","sources":["../../../src/notification/content-converter.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAItC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,sBAAsB,EAAE,gBAIpC,CAAA;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAAQ;gBAEd,OAAO,EAAE,MAAM;IAI3B,OAAO,CAAC,YAAY;IAMpB,mBAAmB;CAIpB"}
@@ -2,4 +2,5 @@ export * from './widget';
2
2
  export * from './types';
3
3
  export type { FetchDataFunction } from './hook';
4
4
  export * from './notify-detail';
5
+ export * from './content-converter';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notification/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AAExB,cAAc,SAAS,CAAA;AAEvB,YAAY,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAE/C,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notification/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AAExB,cAAc,SAAS,CAAA;AAEvB,YAAY,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAE/C,cAAc,iBAAiB,CAAA;AAE/B,cAAc,qBAAqB,CAAA"}
@@ -16,7 +16,7 @@ export declare class NotifyDetail extends Component<INotifyDetailProps, IState>
16
16
  componentDidMount(): void;
17
17
  componentWillUnmount(): void;
18
18
  fetchDetailIfNeeded: () => Promise<void>;
19
- render(): string | number | boolean | Iterable<import("react").ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
19
+ render(): import("react/jsx-runtime").JSX.Element;
20
20
  handleRetry: () => void;
21
21
  }
22
22
  export default NotifyDetail;
@@ -1 +1 @@
1
- {"version":3,"file":"notify-detail.d.ts","sourceRoot":"","sources":["../../../src/notification/notify-detail.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAIjC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEnF,OAAO,iCAAiC,CAAA;AAExC,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,IAAI,EAAE,aAAa,CAAA;IACnB,WAAW,CAAC,EAAE,mBAAmB,CAAA;CAClC;AAED,UAAU,MAAM;IACd,UAAU,EAAE,aAAa,GAAG,IAAI,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;CACf;AAED,qBAAa,YAAa,SAAQ,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACrE,OAAO,CAAC,eAAe,CAA+B;gBAE1C,KAAK,EAAE,kBAAkB;IAKrC,iBAAiB;IAKjB,oBAAoB;IAIpB,mBAAmB,sBAiClB;IAED,MAAM;IAyCN,WAAW,aAKV;CACF;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"notify-detail.d.ts","sourceRoot":"","sources":["../../../src/notification/notify-detail.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAIjC,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAgB,MAAM,SAAS,CAAA;AAIjG,OAAO,iCAAiC,CAAA;AAExC,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,IAAI,EAAE,aAAa,CAAA;IACnB,WAAW,CAAC,EAAE,mBAAmB,CAAA;CAClC;AAED,UAAU,MAAM;IACd,UAAU,EAAE,aAAa,GAAG,IAAI,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;CACf;AAED,qBAAa,YAAa,SAAQ,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACrE,OAAO,CAAC,eAAe,CAA+B;gBAE1C,KAAK,EAAE,kBAAkB;IAKrC,iBAAiB;IAKjB,oBAAoB;IAIpB,mBAAmB,sBAiClB;IAED,MAAM;IA0CN,WAAW,aAKV;CACF;AAED,eAAe,YAAY,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dinocollab-shared",
3
- "version": "1.2.45",
3
+ "version": "1.2.46",
4
4
  "description": "DinoCollab shared utilities and components",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -1,2 +0,0 @@
1
- import{createClass as t,typeof as e,objectSpread2 as r,classCallCheck as n,defineProperty as s}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i}from"react/jsx-runtime";import o from"./notify-detail.custom.js";import a from"./notify-detail.default.js";import{ETypeContent as l}from"./types.js";var h=function(){return t(function t(e){n(this,t),s(this,"firtVersion","htmlContent"),s(this,"defaultVersion","1.0.0"),this.rawContent=e,this.parsedObj=this.parseContent()},[{key:"parseContent",value:function(){var t,r=void 0;if(!this.rawContent||""===this.rawContent.trim())return{type:l.Template,version:this.defaultVersion,html:""};try{if((t=JSON.parse(this.rawContent))&&"object"===e(t))return r=t.version||this.defaultVersion,{type:t.type||l.Template,version:r,html:t.html||""}}catch(t){if("string"==typeof this.rawContent&&/<[^>]+>/.test(this.rawContent))return{type:l.Template,version:this.firtVersion,html:this.rawContent}}return{type:l.Template,version:this.defaultVersion,html:this.rawContent}}},{key:"getContentByVersion",value:function(){return this.parseContent()}},{key:"renderComponent",value:function(t){var e=this.parseContent();switch(e.type){case l.Custom:return i(o,r(r({},t),{},{html:e.html||""}));case l.Template:default:return i(a,r(r({},t),{},{html:e.html||""}))}}}])}();export{h as NotifyContentConverter};
2
- //# sourceMappingURL=class.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class.config.js","sources":["../../src/notification/class.config.tsx"],"sourcesContent":["import NotifyDetailCustom from './notify-detail.custom'\r\nimport NotifyDetailDefault from './notify-detail.default'\r\nimport { ETypeContent, INotification, INotificationPropsDef } from './types'\r\n\r\nexport interface IRenderComponentProps extends INotificationPropsDef {\r\n data: INotification\r\n}\r\n\r\nexport interface ConfigType {\r\n type: ETypeContent\r\n version?: string\r\n html?: string\r\n}\r\n\r\nexport class NotifyContentConverter {\r\n private rawContent: string\r\n private parsedObj: any\r\n private firtVersion = 'htmlContent'\r\n private defaultVersion = '1.0.0'\r\n\r\n constructor(content: string) {\r\n this.rawContent = content\r\n this.parsedObj = this.parseContent()\r\n }\r\n\r\n private parseContent(): ConfigType {\r\n let parsed: any\r\n let detectedVersion: string | undefined = undefined\r\n\r\n // If content is empty\r\n if (!this.rawContent || this.rawContent.trim() === '') {\r\n return { type: ETypeContent.Template, version: this.defaultVersion, html: '' }\r\n }\r\n\r\n try {\r\n // Try to parse JSON\r\n parsed = JSON.parse(this.rawContent)\r\n\r\n // If parse successful and is object\r\n if (parsed && typeof parsed === 'object') {\r\n detectedVersion = parsed.version || this.defaultVersion\r\n return { type: parsed.type || ETypeContent.Template, version: detectedVersion, html: parsed.html || '' }\r\n }\r\n } catch {\r\n // If not JSON, check if it's HTML\r\n if (typeof this.rawContent === 'string' && /<[^>]+>/.test(this.rawContent)) {\r\n // First version html content\r\n return { type: ETypeContent.Template, version: this.firtVersion, html: this.rawContent }\r\n }\r\n }\r\n\r\n // Fallback: treat as plain text\r\n return { type: ETypeContent.Template, version: this.defaultVersion, html: this.rawContent }\r\n }\r\n\r\n getContentByVersion() {\r\n const obj = this.parseContent()\r\n return obj\r\n }\r\n\r\n renderComponent(props: IRenderComponentProps): React.ReactNode {\r\n const obj = this.parseContent()\r\n switch (obj.type) {\r\n case ETypeContent.Custom:\r\n return <NotifyDetailCustom {...props} html={obj.html || ''} />\r\n case ETypeContent.Template:\r\n default:\r\n return <NotifyDetailDefault {...props} html={obj.html || ''} />\r\n }\r\n }\r\n}\r\n"],"names":["NotifyContentConverter","_createClass","content","_classCallCheck","_defineProperty","this","rawContent","parsedObj","parseContent","key","value","parsed","detectedVersion","undefined","trim","type","ETypeContent","Template","version","defaultVersion","html","JSON","parse","_typeof","_unused","test","firtVersion","props","obj","Custom","_jsx","NotifyDetailCustom","_objectSpread","NotifyDetailDefault"],"mappings":"mTAcA,IAAaA,EAAsB,WAShC,OAAAC,EAHD,SAAAD,EAAYE,GAAeC,OAAAH,GAAAI,qBAHL,eAAaA,wBACV,SAGvBC,KAAKC,WAAaJ,EAClBG,KAAKE,UAAYF,KAAKG,cACxB,EAAC,CAAA,CAAAC,IAAA,eAAAC,MAEO,WACN,IAAIC,EACAC,OAAsCC,EAG1C,IAAKR,KAAKC,YAAyC,KAA3BD,KAAKC,WAAWQ,OACtC,MAAO,CAAEC,KAAMC,EAAaC,SAAUC,QAASb,KAAKc,eAAgBC,KAAM,IAG5E,IAKE,IAHAT,EAASU,KAAKC,MAAMjB,KAAKC,cAGO,WAAlBiB,EAAOZ,GAEnB,OADAC,EAAkBD,EAAOO,SAAWb,KAAKc,eAClC,CAAEJ,KAAMJ,EAAOI,MAAQC,EAAaC,SAAUC,QAASN,EAAiBQ,KAAMT,EAAOS,MAAQ,GAEvG,CAAC,MAAAI,GAEA,GAA+B,iBAApBnB,KAAKC,YAA2B,UAAUmB,KAAKpB,KAAKC,YAE7D,MAAO,CAAES,KAAMC,EAAaC,SAAUC,QAASb,KAAKqB,YAAaN,KAAMf,KAAKC,WAE/E,CAGD,MAAO,CAAES,KAAMC,EAAaC,SAAUC,QAASb,KAAKc,eAAgBC,KAAMf,KAAKC,WACjF,GAAC,CAAAG,IAAA,sBAAAC,MAED,WAEE,OADYL,KAAKG,cAEnB,GAAC,CAAAC,IAAA,kBAAAC,MAED,SAAgBiB,GACd,IAAMC,EAAMvB,KAAKG,eACjB,OAAQoB,EAAIb,MACV,KAAKC,EAAaa,OAChB,OAAOC,EAACC,EAAkBC,EAAAA,KAAKL,GAAK,GAAA,CAAEP,KAAMQ,EAAIR,MAAQ,MAC1D,KAAKJ,EAAaC,SAClB,QACE,OAAOa,EAACG,EAAmBD,EAAAA,KAAKL,GAAK,GAAA,CAAEP,KAAMQ,EAAIR,MAAQ,MAE/D,IAAC,CAvDgC"}
@@ -1,21 +0,0 @@
1
- /// <reference types="react" />
2
- import { ETypeContent, INotification, INotificationPropsDef } from './types';
3
- export interface IRenderComponentProps extends INotificationPropsDef {
4
- data: INotification;
5
- }
6
- export interface ConfigType {
7
- type: ETypeContent;
8
- version?: string;
9
- html?: string;
10
- }
11
- export declare class NotifyContentConverter {
12
- private rawContent;
13
- private parsedObj;
14
- private firtVersion;
15
- private defaultVersion;
16
- constructor(content: string);
17
- private parseContent;
18
- getContentByVersion(): ConfigType;
19
- renderComponent(props: IRenderComponentProps): React.ReactNode;
20
- }
21
- //# sourceMappingURL=class.config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class.config.d.ts","sourceRoot":"","sources":["../../../src/notification/class.config.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE5E,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,IAAI,EAAE,aAAa,CAAA;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,cAAc,CAAU;gBAEpB,OAAO,EAAE,MAAM;IAK3B,OAAO,CAAC,YAAY;IA8BpB,mBAAmB;IAKnB,eAAe,CAAC,KAAK,EAAE,qBAAqB,GAAG,KAAK,CAAC,SAAS;CAU/D"}