diff --git a/com.twin.app.shoptime/src/views/DetailPanel/ThemeProduct/ThemeContents.figma.jsx b/com.twin.app.shoptime/src/views/DetailPanel/ThemeProduct/ThemeContents.figma.jsx
new file mode 100644
index 00000000..ead8f635
--- /dev/null
+++ b/com.twin.app.shoptime/src/views/DetailPanel/ThemeProduct/ThemeContents.figma.jsx
@@ -0,0 +1,958 @@
+
+
+
+
+

+
+
+ Orlgami Removable Connecting Rack 2 -pack
+
+
+
+ $32.98
+
+
+ $150.00
+
+
+
+
+
+

+
+
+ Orlgami Removable Connecting Rack 2 -pack
+
+
+
+ $32.98
+
+
+ $150.00
+
+
+
+
+
+

+
+
+ Orlgami Removable Connecting Rack 2 -pack
+
+
+
+ $32.98
+
+
+ $150.00
+
+
+
+
+
+
+

+
+
+ Orlgami Removable Connecting Rack 2 -pack
+
+
+
+ $32.98
+
+
+ $150.00
+
+
+
+
+
+
+

+
+
+ Orlgami Removable Connecting Rack 2 -pack
+
+
+
+ $32.98
+
+
+ $150.00
+
+
+
+
+
+
;
diff --git a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ThemeContents.jsx b/com.twin.app.shoptime/src/views/DetailPanel/ThemeProduct/ThemeContents.jsx
similarity index 75%
rename from com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ThemeContents.jsx
rename to com.twin.app.shoptime/src/views/DetailPanel/ThemeProduct/ThemeContents.jsx
index 85b1679f..0045f074 100644
--- a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ThemeContents.jsx
+++ b/com.twin.app.shoptime/src/views/DetailPanel/ThemeProduct/ThemeContents.jsx
@@ -4,13 +4,16 @@ import { useDispatch } from 'react-redux';
import Spotlight from '@enact/spotlight';
-import { updatePanel } from '../../../../actions/panelActions';
-import TVirtualGridList from '../../../../components/TVirtualGridList/TVirtualGridList';
-import { LOG_CONTEXT_NAME, LOG_MENU, LOG_MESSAGE_ID, panel_names } from '../../../../utils/Config';
-import PlayerItemCard, { TYPES } from '../../PlayerItemCard/PlayerItemCard';
-import ListEmptyContents from '../TabContents/ListEmptyContents/ListEmptyContents';
+import arrowDownIcon from '../../../../assets/images/icons/ic-arrow-down.svg';
+import { updatePanel } from '../../../actions/panelActions';
+import TButton from '../../../components/TButton/TButton';
+import TVirtualGridList from '../../../components/TVirtualGridList/TVirtualGridList';
+import { LOG_CONTEXT_NAME, LOG_MENU, LOG_MESSAGE_ID, panel_names } from '../../../utils/Config';
+import { $L } from '../../../utils/helperMethods';
+import PlayerItemCard, { TYPES } from '../../PlayerPanel/PlayerItemCard/PlayerItemCard';
+import ListEmptyContents from '../../PlayerPanel/PlayerTabContents/TabContents/ListEmptyContents/ListEmptyContents';
import css from './ThemeContents.module.less';
-import { sendLogTotalRecommend } from '../../../../actions/logActions';
+import { sendLogTotalRecommend } from '../../../actions/logActions';
export default function ThemeContents({
themeItems,
@@ -23,11 +26,18 @@ export default function ThemeContents({
panelInfo,
direction = 'horizontal',
version = 2,
+ onThemeItemClose,
}) {
const dispatch = useDispatch();
const isClickBlocked = useRef(false);
const blockTimeoutRef = useRef(null);
+ const handleThemeItemButtonClick = useCallback(() => {
+ if (onThemeItemClose) {
+ onThemeItemClose();
+ }
+ }, [onThemeItemClose]);
+
const handleFocus = useCallback(
() => () => {
if (handleItemFocus) {
@@ -133,7 +143,18 @@ export default function ThemeContents({
/>
);
},
- [themeItems, currentVideoShowId, isClickBlocked, dispatch, handleFocus, version, tabIndex, tabTitle, panelInfo, setSelectedIndex]
+ [
+ themeItems,
+ currentVideoShowId,
+ isClickBlocked,
+ dispatch,
+ handleFocus,
+ version,
+ tabIndex,
+ tabTitle,
+ panelInfo,
+ setSelectedIndex,
+ ]
);
// cleanup useEffect
@@ -162,6 +183,16 @@ export default function ThemeContents({
)}
+
+
+ {$L('THEME ITEM')}
+
+
+
>
);
}
diff --git a/com.twin.app.shoptime/src/views/DetailPanel/ThemeProduct/ThemeContents.module.less b/com.twin.app.shoptime/src/views/DetailPanel/ThemeProduct/ThemeContents.module.less
new file mode 100644
index 00000000..e82e30e5
--- /dev/null
+++ b/com.twin.app.shoptime/src/views/DetailPanel/ThemeProduct/ThemeContents.module.less
@@ -0,0 +1,96 @@
+@import "../../../../style/CommonStyle.module.less";
+@import "../../../../style/utils.module.less";
+
+.container {
+ width: 100%;
+ height: 180px;
+
+ > div:nth-child(1) {
+ .size(@w: 100%, @h: 100%);
+ }
+}
+
+.themeList {
+ width: 100%;
+ .flex(@display: flex, @justifyCenter: flex-start, @alignCenter: flex-start);
+ overflow-x: auto;
+ overflow-y: hidden;
+
+ > * + * {
+ margin-left: 18px;
+ }
+}
+
+// Theme Item Button 스타일
+.bottomButtonWrapper {
+ width: 100%;
+ height: 60px;
+ padding: 0;
+ margin-top: 10px;
+ display: flex;
+ justify-content: flex-start;
+ align-items: center;
+}
+
+.themeButton {
+ width: 100% !important;
+ height: 60px !important;
+ padding: 20px 30px !important;
+ background: rgba(255, 255, 255, 0.05) !important;
+ overflow: visible !important;
+ border-radius: 6px !important;
+ border: none !important;
+ justify-content: center !important;
+ align-items: center !important;
+ display: flex !important;
+ flex-direction: row !important;
+ white-space: nowrap !important;
+ caret-color: transparent !important;
+ user-select: none !important;
+ -webkit-user-select: none !important;
+
+ color: white !important;
+ font-size: 25px !important;
+ font-family: @baseFont !important;
+ font-weight: 600 !important;
+ line-height: 35px !important;
+ word-wrap: break-word !important;
+
+ > * {
+ display: flex !important;
+ flex-direction: row !important;
+ align-items: center !important;
+ justify-content: center !important;
+ gap: 15px !important;
+ width: auto !important;
+ height: auto !important;
+ caret-color: transparent !important;
+ user-select: none !important;
+ -webkit-user-select: none !important;
+
+ > * {
+ display: inline !important;
+ margin: 0 !important;
+ caret-color: transparent !important;
+ user-select: none !important;
+ -webkit-user-select: none !important;
+ }
+ }
+
+ &:focus {
+ background: @PRIMARY_COLOR_RED !important;
+ outline: none !important;
+ caret-color: transparent !important;
+ }
+
+ &:hover {
+ background: @PRIMARY_COLOR_RED !important;
+ }
+}
+
+.themeButtonIcon {
+ width: 52.5px;
+ height: 31.25px;
+ object-fit: contain;
+ flex-shrink: 0;
+}
diff --git a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ThemeContents.figma.jsx b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ThemeContents.figma.jsx
deleted file mode 100644
index e69de29b..00000000
diff --git a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ThemeContents.module.less b/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ThemeContents.module.less
deleted file mode 100644
index 7b73b403..00000000
--- a/com.twin.app.shoptime/src/views/PlayerPanel/PlayerTabContents/TabContents/ThemeContents.module.less
+++ /dev/null
@@ -1,22 +0,0 @@
-@import "../../../../style/CommonStyle.module.less";
-@import "../../../../style/utils.module.less";
-
-.container {
- width: 100%;
- height: 180px;
-
- > div:nth-child(1) {
- .size(@w: 100%, @h: 100%);
- }
-}
-
-.themeList {
- width: 100%;
- .flex(@display: flex, @justifyCenter: flex-start, @alignCenter: flex-start);
- overflow-x: auto;
- overflow-y: hidden;
-
- > * + * {
- margin-left: 18px;
- }
-}