@wereform/pkgm-wire 1.0.4 → 1.0.5
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.
- package/dist/components/WireChannelMetadata.js +1 -1
- package/dist/layout/WireCardLayout.js +2 -2
- package/dist/layout/WireUploadLayout.js +1 -1
- package/dist/layout/WireViewLayout.js +1 -1
- package/dist/styles/WireUploadStyles.js +1 -1
- package/package.json +38 -38
- package/src/components/WireChannelMetadata.jsx +56 -10
- package/src/layout/WireCardLayout.jsx +40 -1
- package/src/layout/WireUploadLayout.jsx +41 -0
- package/src/layout/WireViewLayout.jsx +32 -0
- package/src/styles/WireCardLayoutStyles.js +46 -1
- package/src/styles/WireChannelMetadataStyles.js +82 -10
- package/src/styles/WireUploadStyles.js +88 -13
- package/src/styles/WireViewLayoutStyles.js +35 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.WireChannelMetadata=WireChannelMetadata;var _reactNative=require("react-native");var _WireChannelMetadataStyles=require("../styles/WireChannelMetadataStyles");var _vectorIcons=require("@expo/vector-icons");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="F:\\WeReform Corporation\\Products\\BEGENONE\\App\\
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.WireChannelMetadata=WireChannelMetadata;var _reactNative=require("react-native");var _WireChannelMetadataStyles=require("../styles/WireChannelMetadataStyles");var _vectorIcons=require("@expo/vector-icons");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="F:\\WeReform Corporation\\Products\\BEGENONE\\App\\Mobile\\packages\\begenone-pkgm-wire\\src\\components\\WireChannelMetadata.jsx";function WireChannelMetadata(_ref){var channelLogo=_ref.channelLogo,userName=_ref.userName,subscribersCount=_ref.subscribersCount,timeAgo=_ref.timeAgo,viewsText=_ref.viewsText,containerStyles=_ref.containerStyles;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.channelMetaContainer,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.channelMetaContainer_ColumnOne,children:[(0,_jsxRuntime.jsx)(_reactNative.Image,{source:{uri:channelLogo||"https://begenone-images.s3.us-east-1.amazonaws.com/default-user-photo.jpg"},style:_WireChannelMetadataStyles.WireChannelMetadataStyles.userImage}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.nameSubcountContainer,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.userName,children:userName||"Default Username"}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.subCountContainer,children:subscribersCount>0&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.subCount,children:subscribersCount||"0"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.subText,children:"Subscribers"})]})})]})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[_WireChannelMetadataStyles.WireChannelMetadataStyles.dateViewsContainer,containerStyles],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.dateContainer,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.dateText,children:timeAgo||"14 Hours Ago"}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.dateIcon,children:(0,_jsxRuntime.jsx)(_vectorIcons.Ionicons,{name:"calendar",size:16,color:"white"})})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.viewsContainer,children:viewsText>0&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.viewsText,children:viewsText||"0"}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:_WireChannelMetadataStyles.WireChannelMetadataStyles.eyeIcon,children:(0,_jsxRuntime.jsx)(_vectorIcons.Ionicons,{name:"eye-outline",size:16,color:"white"})})]})})]})]});}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.WireCardLayout=WireCardLayout;var _reactNative=require("react-native");var _pkgmShared=require("@wereform/pkgm-shared");var _vectorIcons=require("@expo/vector-icons");var _WireChannelMetadata=require("../components/WireChannelMetadata");var _WireCardLayoutStyles=require("../styles/WireCardLayoutStyles");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="F:\\WeReform Corporation\\Products\\BEGENONE\\App\\
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.WireCardLayout=WireCardLayout;var _reactNative=require("react-native");var _pkgmShared=require("@wereform/pkgm-shared");var _vectorIcons=require("@expo/vector-icons");var _WireChannelMetadata=require("../components/WireChannelMetadata");var _WireCardLayoutStyles=require("../styles/WireCardLayoutStyles");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="F:\\WeReform Corporation\\Products\\BEGENONE\\App\\Mobile\\packages\\begenone-pkgm-wire\\src\\layout\\WireCardLayout.jsx";function WireCardLayout(_ref){var _this=this;var content=_ref.content,channelLogo=_ref.channelLogo,userName=_ref.userName,subscribersCount=_ref.subscribersCount,timeAgo=_ref.timeAgo,viewsText=_ref.viewsText,onPress=_ref.onPress;var limit=8;var contentText=content!=null?content:`Lorem ipsum dolor sit amet consectetur adipisicing elit. Vero quidem
|
|
2
2
|
distinctio porro qui minus totam eius. Sed laudantium nisi expedita
|
|
3
3
|
distinctio dignissimos dicta praesentium nihil iste velit cumque!
|
|
4
4
|
Assumenda illum veritatis, ipsam sint
|
|
5
5
|
|
|
6
6
|
vero corporis distinctio rem
|
|
7
7
|
quisquam natus iste. Unde esse consequuntur maiores repellendus, cum
|
|
8
|
-
voluptatem vero incidunt temporibus.`;var finalText=contentText?contentText.replace(/\r\n/g,"\n").split("\n"):[];return(0,_jsxRuntime.
|
|
8
|
+
voluptatem vero incidunt temporibus.`;var finalText=contentText?contentText.replace(/\r\n/g,"\n").split("\n"):[];return(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{style:_WireCardLayoutStyles.WireCardLayoutStyles.container,onPress:onPress,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_WireChannelMetadata.WireChannelMetadata,{channelLogo:channelLogo||"https://begenone-images.s3.us-east-1.amazonaws.com/default-user-photo.jpg",userName:userName,subscribersCount:subscribersCount,timeAgo:timeAgo,viewsText:viewsText}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireCardLayoutStyles.WireCardLayoutStyles.mainTextContainer,children:[finalText.length>0&&(0,_jsxRuntime.jsx)(_reactNative.Text,{numberOfLines:limit,style:_WireCardLayoutStyles.WireCardLayoutStyles.mainText,children:finalText.map(function(text,index){return(0,_jsxRuntime.jsxs)(_reactNative.Text,{children:[text.trim().replace(/\s+/g," "),index<finalText.length-1?"\n":""]},index);})}),(0,_jsxRuntime.jsx)(_reactNative.Text,{children:" "}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:_WireCardLayoutStyles.WireCardLayoutStyles.seeMore,children:"See more \u2192"})]})]})});}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.WireUploadLayout=WireUploadLayout;var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=require("react");var _reactNative=require("react-native");var ImagePicker=_interopRequireWildcard(require("expo-image-picker"));var VideoThumbnails=_interopRequireWildcard(require("expo-video-thumbnails"));var _vectorIcons=require("@expo/vector-icons");var _WireUploadStyles=require("../styles/WireUploadStyles");var _pkgmShared=require("@wereform/pkgm-shared");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="F:\\WeReform Corporation\\Products\\BEGENONE\\App\\
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.WireUploadLayout=WireUploadLayout;var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _react=require("react");var _reactNative=require("react-native");var ImagePicker=_interopRequireWildcard(require("expo-image-picker"));var VideoThumbnails=_interopRequireWildcard(require("expo-video-thumbnails"));var _vectorIcons=require("@expo/vector-icons");var _WireUploadStyles=require("../styles/WireUploadStyles");var _pkgmShared=require("@wereform/pkgm-shared");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="F:\\WeReform Corporation\\Products\\BEGENONE\\App\\Mobile\\packages\\begenone-pkgm-wire\\src\\layout\\WireUploadLayout.jsx";function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t in e)"default"!==_t&&{}.hasOwnProperty.call(e,_t)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t))&&(i.get||i.set)?o(f,_t,i):f[_t]=e[_t]);return f;})(e,t);}function WireUploadLayout(_ref){var _this=this;var profilePic=_ref.profilePic,userName=_ref.userName,onPressVideoUploadScreen=_ref.onPressVideoUploadScreen,onPressWireUpload=_ref.onPressWireUpload,_ref$showUploadContai=_ref.showUploadContainers,showUploadContainers=_ref$showUploadContai===void 0?false:_ref$showUploadContai,_ref$showDropDowns=_ref.showDropDowns,showDropDowns=_ref$showDropDowns===void 0?false:_ref$showDropDowns;var _useState=(0,_react.useState)(``),_useState2=(0,_slicedToArray2.default)(_useState,2),wireText=_useState2[0],setWireText=_useState2[1];var _useState3=(0,_react.useState)(null),_useState4=(0,_slicedToArray2.default)(_useState3,2),media=_useState4[0],setMedia=_useState4[1];var _useState5=(0,_react.useState)([]),_useState6=(0,_slicedToArray2.default)(_useState5,2),thumbnails=_useState6[0],setThumbnails=_useState6[1];var _useState7=(0,_react.useState)("Default Heading!"),_useState8=(0,_slicedToArray2.default)(_useState7,2),heading=_useState8[0],setHeading=_useState8[1];var pickMedia=function(){var _ref2=(0,_asyncToGenerator2.default)(function*(){var result=yield ImagePicker.launchImageLibraryAsync({mediaTypes:["images","videos"],allowsMultipleSelection:true,selectionLimit:4,quality:1});if(result.canceled)return;var assets=result.assets;setMedia(assets);var finalThumbs=yield Promise.all(assets.map(function(){var _ref3=(0,_asyncToGenerator2.default)(function*(asset){var _asset$mimeType;var isVideo=asset.type==="video"||((_asset$mimeType=asset.mimeType)==null?void 0:_asset$mimeType.startsWith("video"));if(isVideo){try{var _yield$VideoThumbnail=yield VideoThumbnails.getThumbnailAsync(asset.uri,{time:1000}),uri=_yield$VideoThumbnail.uri;return uri;}catch(err){console.log("Video thumbnail error:",err);return null;}}return asset.uri;});return function(_x){return _ref3.apply(this,arguments);};}()));console.log(finalThumbs);setThumbnails(finalThumbs);});return function pickMedia(){return _ref2.apply(this,arguments);};}();console.log(wireText);return(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireUploadStyles.WireUploadStyles.container,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireUploadStyles.WireUploadStyles.profileSection,children:[(0,_jsxRuntime.jsx)(_reactNative.Image,{source:{uri:profilePic||"https://begenone-images.s3.us-east-1.amazonaws.com/default-user-photo.jpg"},style:_WireUploadStyles.WireUploadStyles.userImage}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:_WireUploadStyles.WireUploadStyles.userInfo,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:_WireUploadStyles.WireUploadStyles.userName,children:userName||"Default Username"})})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireUploadStyles.WireUploadStyles.wireInputContainer,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",justifyContent:"space-between",alignItems:"center"},children:[(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:{color:"#fff",fontWeight:"900",fontSize:24,paddingBottom:12,flexGrow:1,justifyContent:"flex-start"},children:["Create ",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:"#ff6000"},children:"Wire"})]}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:onPressVideoUploadScreen,children:(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:{color:"#fff",fontWeight:"500",fontSize:14,paddingBottom:12,alignSelf:"center"},children:["Upload ",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:"#ff6000"},children:"Video"})]})})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireUploadStyles.WireUploadStyles.wireInputTextContainer,children:[(0,_jsxRuntime.jsx)(_pkgmShared.InputField,{multiline:true,placeholder:"Write your Wire...",inputWrapper:_WireUploadStyles.WireUploadStyles.inputWrapper,inputStyle:_WireUploadStyles.WireUploadStyles.aboutTextArea,value:wireText,onChangeText:setWireText}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:_WireUploadStyles.WireUploadStyles.mediaContainer,children:thumbnails.map(function(uri,index){return(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:pickMedia,children:(0,_jsxRuntime.jsx)(_reactNative.Image,{source:{uri:uri},style:_WireUploadStyles.WireUploadStyles.mediaThumb,resizeMode:"cover"})},index);})}),showUploadContainers&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_WireUploadStyles.WireUploadStyles.uploadButtonContainer,children:[(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{style:_WireUploadStyles.WireUploadStyles.AIGenerateButton,children:(0,_jsxRuntime.jsx)(_vectorIcons.Ionicons,{name:"sparkles-outline",size:24,color:"#fff"})}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:pickMedia,style:_WireUploadStyles.WireUploadStyles.uploadImageButton,children:(0,_jsxRuntime.jsx)(_vectorIcons.Ionicons,{name:"image",size:24,color:"#fff"})})]})]}),showDropDowns&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_pkgmShared.DropDown,{styles:{marginLeft:0,marginRight:0,marginTop:18},iconStyles:{paddingRight:16},selectText:"Select Age Group",data:[{key:1,label:"Under 14 of age"},{key:2,label:"Above 14 of age"}]}),(0,_jsxRuntime.jsx)(_pkgmShared.DropDown,{styles:{marginLeft:0,marginRight:0,marginTop:18},selectText:"Comments",iconStyles:{paddingRight:16},data:[{key:1,label:"Turn — ON"},{key:2,label:"Turn — OFF"}]})]})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row",width:"auto",justifyContent:"space-between",marginTop:60,marginLeft:24,marginRight:24},children:(0,_jsxRuntime.jsx)(_pkgmShared.CustomizedButton,{label:"Post Wire",style:{backgroundColor:"#ff6000",marginRight:6},fontWeight:"900",textColor:"#fff",onPress:function onPress(){return onPressWireUpload(wireText,heading);}})})]})});}var styles=_reactNative.StyleSheet.create({});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.WireViewLayout=WireViewLayout;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _reactNative=require("react-native");var _WireChannelMetadata=require("../components/WireChannelMetadata");var _WireCardLayoutStyles=require("../styles/WireCardLayoutStyles");var _pkgmShared=require("@wereform/pkgm-shared");var _WireViewLayoutStyles=require("../styles/WireViewLayoutStyles");var _react=require("react");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="F:\\WeReform Corporation\\Products\\BEGENONE\\App\\
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.WireViewLayout=WireViewLayout;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _reactNative=require("react-native");var _WireChannelMetadata=require("../components/WireChannelMetadata");var _WireCardLayoutStyles=require("../styles/WireCardLayoutStyles");var _pkgmShared=require("@wereform/pkgm-shared");var _WireViewLayoutStyles=require("../styles/WireViewLayoutStyles");var _react=require("react");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="F:\\WeReform Corporation\\Products\\BEGENONE\\App\\Mobile\\packages\\begenone-pkgm-wire\\src\\layout\\WireViewLayout.jsx";function WireViewLayout(_ref){var _this=this;var content=_ref.content,channelLogo=_ref.channelLogo,userName=_ref.userName,subscribersCount=_ref.subscribersCount,timeAgo=_ref.timeAgo,viewsText=_ref.viewsText,isItMe=_ref.isItMe,onPressDeleteButton=_ref.onPressDeleteButton;var _useState=(0,_react.useState)(false),_useState2=(0,_slicedToArray2.default)(_useState,2),isPressed=_useState2[0],setPressed=_useState2[1];var contentText=content!=null?content:`Curiosity is the real engine of progress. You don’t need certainty — you need movement. Every experiment, every failure, every weird idea you chase sharpens your understanding of reality.
|
|
2
2
|
|
|
3
3
|
Stop waiting to “figure it out” first. Dive in, break things, rebuild smarter. The mind grows through friction, not comfort.
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.WireUploadStyles=void 0;var _reactNative=require("react-native");var _globalStyles=require("./globalStyles");var WireUploadStyles=exports.WireUploadStyles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"#141414",marginBottom:120},profileSection:{flexDirection:"row",alignItems:"center",borderBottomWidth:1,paddingTop:18,paddingBottom:18,marginLeft:36,marginRight:36,borderColor:_globalStyles.globalStyles.colors.colorPrimary450},userImage:{width:60,height:60,borderRadius:12,marginRight:16},userInfo:{flexDirection:"column",justifyContent:"center"},userName:{color:"white",fontSize:18,fontWeight:"600"},channelSettingsText:{color:"#ff6600",marginTop:4},wireInputContainer:{marginRight:24,marginLeft:24,marginTop:24},wireInputTextContainer:{backgroundColor:"#202020",borderRadius:12},inputWrapper:{backgroundColor:"#202020",width:"auto",borderBottomRightRadius:0,borderBottomLeftRadius:0},aboutTextArea:{textAlignVertical:"top",whiteSpace:"pre",height:"auto",minHeight:200,color:"white",paddingTop:16,
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.WireUploadStyles=void 0;var _reactNative=require("react-native");var _globalStyles=require("./globalStyles");var WireUploadStyles=exports.WireUploadStyles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:"#141414",marginBottom:120},profileSection:{flexDirection:"row",alignItems:"center",borderBottomWidth:1,paddingTop:18,paddingBottom:18,marginLeft:36,marginRight:36,borderColor:_globalStyles.globalStyles.colors.colorPrimary450},userImage:{width:60,height:60,borderRadius:12,marginRight:16},userInfo:{flexDirection:"column",justifyContent:"center"},userName:{color:"white",fontSize:18,fontWeight:"600"},channelSettingsText:{color:"#ff6600",marginTop:4},wireInputContainer:{marginRight:24,marginLeft:24,marginTop:24},wireInputTextContainer:{backgroundColor:"#202020",borderRadius:12},inputWrapper:{backgroundColor:"#202020",width:"auto",borderBottomRightRadius:0,borderBottomLeftRadius:0},aboutTextArea:{textAlignVertical:"top",whiteSpace:"pre",height:"auto",minHeight:200,color:"white",paddingTop:16,lineHeight:24,fontWeight:400,fontSize:18,paddingBottom:36},media:{width:"auto",height:200,borderRadius:14,backgroundColor:"#000"},uploadButtonContainer:{flexDirection:"row",alignItems:"center",justifyContent:"flex-end"},AIGenerateButton:{paddingRight:24},uploadImageButton:{paddingRight:24,paddingVertical:24,borderRadius:12},uploadButtonText:{color:"#fff",fontSize:14,fontWeight:"600",marginLeft:8},mediaContainer:{flexDirection:"row",flexWrap:"wrap",gap:10,width:"auto",marginBottom:16,paddingLeft:6,paddingRight:6,justifyContent:"space-evenly"},mediaThumb:{width:120,height:120,borderRadius:12,backgroundColor:"#000"}});
|
package/package.json
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@wereform/pkgm-wire",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"source": "
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"react-native": "
|
|
7
|
-
"files": [
|
|
8
|
-
"dist",
|
|
9
|
-
"src",
|
|
10
|
-
"README.md"
|
|
11
|
-
],
|
|
12
|
-
"scripts": {
|
|
13
|
-
"build": "babel src --out-dir dist --extensions .js,.jsx",
|
|
14
|
-
"prepublishOnly": "pnpm run build"
|
|
15
|
-
},
|
|
16
|
-
"publishConfig": {
|
|
17
|
-
"access": "public"
|
|
18
|
-
},
|
|
19
|
-
"peerDependencies": {
|
|
20
|
-
"@expo/vector-icons": "*",
|
|
21
|
-
"react": "*",
|
|
22
|
-
"react-native": "*"
|
|
23
|
-
},
|
|
24
|
-
"dependencies": {
|
|
25
|
-
"@wereform/pkgm-channel": "^1.0.
|
|
26
|
-
"@wereform/pkgm-settings": "^1.0.
|
|
27
|
-
"@wereform/pkgm-shared": "^1.0.
|
|
28
|
-
"@wereform/pkgm-video": "^1.0.
|
|
29
|
-
"expo-image-picker": "^17.0.8",
|
|
30
|
-
"expo-video-thumbnails": "^10.0.7"
|
|
31
|
-
},
|
|
32
|
-
"devDependencies": {
|
|
33
|
-
"@babel/cli": "^7.28.3",
|
|
34
|
-
"@babel/core": "^7.28.5",
|
|
35
|
-
"@babel/preset-env": "^7.28.5",
|
|
36
|
-
"metro-react-native-babel-preset": "^0.77.0"
|
|
37
|
-
}
|
|
38
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@wereform/pkgm-wire",
|
|
3
|
+
"version": "1.0.5",
|
|
4
|
+
"source": "dist/index.js",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"react-native": "dist/index.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"src",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "babel src --out-dir dist --extensions .js,.jsx",
|
|
14
|
+
"prepublishOnly": "pnpm run build"
|
|
15
|
+
},
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"@expo/vector-icons": "*",
|
|
21
|
+
"react": "*",
|
|
22
|
+
"react-native": "*"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@wereform/pkgm-channel": "^1.0.5",
|
|
26
|
+
"@wereform/pkgm-settings": "^1.0.6",
|
|
27
|
+
"@wereform/pkgm-shared": "^1.0.4",
|
|
28
|
+
"@wereform/pkgm-video": "^1.0.4",
|
|
29
|
+
"expo-image-picker": "^17.0.8",
|
|
30
|
+
"expo-video-thumbnails": "^10.0.7"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@babel/cli": "^7.28.3",
|
|
34
|
+
"@babel/core": "^7.28.5",
|
|
35
|
+
"@babel/preset-env": "^7.28.5",
|
|
36
|
+
"metro-react-native-babel-preset": "^0.77.0"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -2,6 +2,42 @@ import { Image, Pressable, Text, View } from "react-native";
|
|
|
2
2
|
import { WireChannelMetadataStyles } from "../styles/WireChannelMetadataStyles";
|
|
3
3
|
import { Ionicons } from "@expo/vector-icons";
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* WireChannelMetadata
|
|
7
|
+
*
|
|
8
|
+
* Displays channel-level metadata for a Wire post.
|
|
9
|
+
* Designed for compact, inline presentation under wire content.
|
|
10
|
+
*
|
|
11
|
+
* Props:
|
|
12
|
+
* - channelLogo: string (URL)
|
|
13
|
+
* URL of the channel or user profile image.
|
|
14
|
+
* Falls back to a default placeholder image if not provided.
|
|
15
|
+
*
|
|
16
|
+
* - userName: string
|
|
17
|
+
* Display name of the channel or user.
|
|
18
|
+
*
|
|
19
|
+
* - subscribersCount: string | number
|
|
20
|
+
* Total number of subscribers for the channel.
|
|
21
|
+
*
|
|
22
|
+
* - timeAgo: string
|
|
23
|
+
* Human-readable timestamp (e.g. "14 Hours Ago").
|
|
24
|
+
*
|
|
25
|
+
* - viewsText: string | number
|
|
26
|
+
* View count displayed alongside the eye icon.
|
|
27
|
+
*
|
|
28
|
+
* - containerStyles: object (optional)
|
|
29
|
+
* Style overrides for the date/views container.
|
|
30
|
+
*
|
|
31
|
+
* Behavior:
|
|
32
|
+
* - Renders channel identity (logo, name, subscriber count)
|
|
33
|
+
* - Displays publish time and views with icons
|
|
34
|
+
* - Uses sensible defaults when props are missing
|
|
35
|
+
*
|
|
36
|
+
* Usage:
|
|
37
|
+
* - Intended for Wire feeds, post headers, or lightweight metadata rows
|
|
38
|
+
* - Optimized for mobile layouts
|
|
39
|
+
*/
|
|
40
|
+
|
|
5
41
|
export function WireChannelMetadata({
|
|
6
42
|
channelLogo,
|
|
7
43
|
userName,
|
|
@@ -26,10 +62,16 @@ export function WireChannelMetadata({
|
|
|
26
62
|
{userName || "Default Username"}
|
|
27
63
|
</Text>
|
|
28
64
|
<View style={WireChannelMetadataStyles.subCountContainer}>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
65
|
+
{subscribersCount > 0 && (
|
|
66
|
+
<>
|
|
67
|
+
<Text style={WireChannelMetadataStyles.subCount}>
|
|
68
|
+
{subscribersCount || "0"}
|
|
69
|
+
</Text>
|
|
70
|
+
<Text style={WireChannelMetadataStyles.subText}>
|
|
71
|
+
Subscribers
|
|
72
|
+
</Text>
|
|
73
|
+
</>
|
|
74
|
+
)}
|
|
33
75
|
</View>
|
|
34
76
|
</View>
|
|
35
77
|
</View>
|
|
@@ -45,12 +87,16 @@ export function WireChannelMetadata({
|
|
|
45
87
|
</View>
|
|
46
88
|
</View>
|
|
47
89
|
<View style={WireChannelMetadataStyles.viewsContainer}>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
90
|
+
{viewsText > 0 && (
|
|
91
|
+
<>
|
|
92
|
+
<Text style={WireChannelMetadataStyles.viewsText}>
|
|
93
|
+
{viewsText || "0"}
|
|
94
|
+
</Text>
|
|
95
|
+
<View style={WireChannelMetadataStyles.eyeIcon}>
|
|
96
|
+
<Ionicons name="eye-outline" size={16} color="white" />
|
|
97
|
+
</View>
|
|
98
|
+
</>
|
|
99
|
+
)}
|
|
54
100
|
</View>
|
|
55
101
|
</View>
|
|
56
102
|
</View>
|
|
@@ -4,6 +4,45 @@ import { Ionicons } from "@expo/vector-icons";
|
|
|
4
4
|
import { WireChannelMetadata } from "../components/WireChannelMetadata";
|
|
5
5
|
import { WireCardLayoutStyles } from "../styles/WireCardLayoutStyles";
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* WireCardLayout
|
|
9
|
+
*
|
|
10
|
+
* Compact, tappable preview card for rendering a Wire in feeds or lists.
|
|
11
|
+
*
|
|
12
|
+
* Responsibilities:
|
|
13
|
+
* - Displays channel metadata (via WireChannelMetadata)
|
|
14
|
+
* - Renders multi-line wire content with a soft line limit
|
|
15
|
+
* - Provides interaction actions via MenuInteraction
|
|
16
|
+
* - Acts as a navigation trigger when pressed
|
|
17
|
+
*
|
|
18
|
+
* Props:
|
|
19
|
+
* - content: string
|
|
20
|
+
* Full wire text content.
|
|
21
|
+
*
|
|
22
|
+
* - channelLogo: string (URL)
|
|
23
|
+
* Channel or user avatar image.
|
|
24
|
+
*
|
|
25
|
+
* - userName: string
|
|
26
|
+
* Channel or author display name.
|
|
27
|
+
*
|
|
28
|
+
* - subscribersCount: string | number
|
|
29
|
+
* Subscriber count shown in metadata.
|
|
30
|
+
*
|
|
31
|
+
* - timeAgo: string
|
|
32
|
+
* Relative publish time (e.g. "2h ago").
|
|
33
|
+
*
|
|
34
|
+
* - viewsText: string | number
|
|
35
|
+
* View count for the wire.
|
|
36
|
+
*
|
|
37
|
+
* - onPress: function
|
|
38
|
+
* Triggered when the card is tapped.
|
|
39
|
+
*
|
|
40
|
+
* Behavior:
|
|
41
|
+
* - Normalizes line breaks and whitespace
|
|
42
|
+
* - Limits visible lines for feed readability
|
|
43
|
+
* - Shows "See more" affordance for full view
|
|
44
|
+
*/
|
|
45
|
+
|
|
7
46
|
export function WireCardLayout({
|
|
8
47
|
content,
|
|
9
48
|
channelLogo,
|
|
@@ -60,7 +99,7 @@ export function WireCardLayout({
|
|
|
60
99
|
<Text style={WireCardLayoutStyles.seeMore}>See more →</Text>
|
|
61
100
|
</View>
|
|
62
101
|
</View>
|
|
63
|
-
<MenuInteraction containerStyles={{ marginBottom: 12 }} />
|
|
102
|
+
{/* <MenuInteraction containerStyles={{ marginBottom: 12 }} /> */}
|
|
64
103
|
</TouchableOpacity>
|
|
65
104
|
);
|
|
66
105
|
}
|
|
@@ -15,6 +15,47 @@ import { Ionicons } from "@expo/vector-icons";
|
|
|
15
15
|
import { WireUploadStyles } from "../styles/WireUploadStyles";
|
|
16
16
|
import { CustomizedButton, DropDown, InputField } from "@wereform/pkgm-shared";
|
|
17
17
|
|
|
18
|
+
/**
|
|
19
|
+
* WireUploadLayout
|
|
20
|
+
*
|
|
21
|
+
* Full wire composer layout with optional media, AI hooks, and settings.
|
|
22
|
+
*
|
|
23
|
+
* Responsibilities:
|
|
24
|
+
* - Wire text composition
|
|
25
|
+
* - Image/video selection with thumbnail previews
|
|
26
|
+
* - Optional dropdowns for moderation & audience controls
|
|
27
|
+
* - Entry point to video upload flow
|
|
28
|
+
*
|
|
29
|
+
* Props:
|
|
30
|
+
* - profilePic: string (URL)
|
|
31
|
+
* Current user profile image.
|
|
32
|
+
*
|
|
33
|
+
* - userName: string
|
|
34
|
+
* Display name of the posting user.
|
|
35
|
+
*
|
|
36
|
+
* - onPressVideoUploadScreen: function
|
|
37
|
+
* Navigates to video upload flow.
|
|
38
|
+
*
|
|
39
|
+
* - onPressWireUpload: function
|
|
40
|
+
* Called with (wireText, heading) when posting.
|
|
41
|
+
*
|
|
42
|
+
* - showUploadContainers: boolean
|
|
43
|
+
* Toggles AI/media action buttons.
|
|
44
|
+
*
|
|
45
|
+
* - showDropDowns: boolean
|
|
46
|
+
* Toggles age-group and comment settings dropdowns.
|
|
47
|
+
*
|
|
48
|
+
* Internal State:
|
|
49
|
+
* - wireText: string
|
|
50
|
+
* - media: selected assets
|
|
51
|
+
* - thumbnails: preview URIs for selected media
|
|
52
|
+
*
|
|
53
|
+
* Behavior:
|
|
54
|
+
* - Supports mixed image/video selection
|
|
55
|
+
* - Auto-generates video thumbnails
|
|
56
|
+
* - Keeps UI vertically structured for mobile ergonomics
|
|
57
|
+
*/
|
|
58
|
+
|
|
18
59
|
export function WireUploadLayout({
|
|
19
60
|
profilePic,
|
|
20
61
|
userName,
|
|
@@ -9,6 +9,38 @@ import {
|
|
|
9
9
|
import { WireViewLayoutStyles } from "../styles/WireViewLayoutStyles";
|
|
10
10
|
import { useState } from "react";
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* WireViewLayout
|
|
14
|
+
*
|
|
15
|
+
* Full-screen wire reader view.
|
|
16
|
+
*
|
|
17
|
+
* Responsibilities:
|
|
18
|
+
* - Displays complete wire content
|
|
19
|
+
* - Shows channel metadata and engagement actions
|
|
20
|
+
* - Conditionally exposes destructive actions for owner
|
|
21
|
+
*
|
|
22
|
+
* Props:
|
|
23
|
+
* - content: string
|
|
24
|
+
* Full wire text.
|
|
25
|
+
*
|
|
26
|
+
* - channelLogo: string (URL)
|
|
27
|
+
* - userName: string
|
|
28
|
+
* - subscribersCount: string | number
|
|
29
|
+
* - timeAgo: string
|
|
30
|
+
* - viewsText: string | number
|
|
31
|
+
*
|
|
32
|
+
* - isItMe: boolean
|
|
33
|
+
* Indicates ownership of the wire.
|
|
34
|
+
*
|
|
35
|
+
* - onPressDeleteButton: function
|
|
36
|
+
* Triggered when delete is confirmed.
|
|
37
|
+
*
|
|
38
|
+
* Behavior:
|
|
39
|
+
* - Preserves original paragraph formatting
|
|
40
|
+
* - Uses MenuInteraction for engagement UI
|
|
41
|
+
* - Reveals delete action only when owned + explicitly triggered
|
|
42
|
+
*/
|
|
43
|
+
|
|
12
44
|
export function WireViewLayout({
|
|
13
45
|
content,
|
|
14
46
|
channelLogo,
|
|
@@ -1,12 +1,35 @@
|
|
|
1
1
|
import { StyleSheet } from "react-native";
|
|
2
2
|
import { globalStyles } from "./globalStyles";
|
|
3
3
|
|
|
4
|
+
/*
|
|
5
|
+
WireCardLayoutStyles
|
|
6
|
+
|
|
7
|
+
Purpose:
|
|
8
|
+
Styles for the Wire card container and text content used in
|
|
9
|
+
short-form, text-first Wire posts.
|
|
10
|
+
|
|
11
|
+
Design constraints:
|
|
12
|
+
- Card spacing and padding are tuned for feed readability.
|
|
13
|
+
- Background and border radius must remain consistent with
|
|
14
|
+
global design tokens to avoid visual drift across feeds.
|
|
15
|
+
- Height is flexible, but constrained to prevent runaway text
|
|
16
|
+
from breaking scroll performance.
|
|
17
|
+
*/
|
|
18
|
+
|
|
4
19
|
export const WireCardLayoutStyles = StyleSheet.create({
|
|
5
20
|
container: {
|
|
21
|
+
/*
|
|
22
|
+
Core card container for a single Wire.
|
|
23
|
+
|
|
24
|
+
Intent:
|
|
25
|
+
- Flexible height to accommodate variable text length.
|
|
26
|
+
- Space-between ensures metadata and actions stay anchored.
|
|
27
|
+
- Margin creates separation between feed items.
|
|
28
|
+
*/
|
|
6
29
|
width: "auto",
|
|
7
30
|
minHeight: 200,
|
|
8
31
|
justifyContent: "space-between",
|
|
9
|
-
// aspectRatio
|
|
32
|
+
// aspectRatio intentionally disabled; text-driven cards must grow vertically
|
|
10
33
|
margin: 12,
|
|
11
34
|
padding: 12,
|
|
12
35
|
backgroundColor: globalStyles.colors.colorPrimary350,
|
|
@@ -14,6 +37,14 @@ export const WireCardLayoutStyles = StyleSheet.create({
|
|
|
14
37
|
},
|
|
15
38
|
|
|
16
39
|
mainTextContainer: {
|
|
40
|
+
/*
|
|
41
|
+
Wrapper around the main Wire text.
|
|
42
|
+
|
|
43
|
+
Constraint:
|
|
44
|
+
- maxHeight prevents extremely long posts from dominating
|
|
45
|
+
the feed and degrading scroll performance.
|
|
46
|
+
- Rounded edges visually separate text from card background.
|
|
47
|
+
*/
|
|
17
48
|
borderRadius: 12,
|
|
18
49
|
paddingVertical: 12,
|
|
19
50
|
paddingHorizontal: 10,
|
|
@@ -22,6 +53,13 @@ export const WireCardLayoutStyles = StyleSheet.create({
|
|
|
22
53
|
},
|
|
23
54
|
|
|
24
55
|
mainText: {
|
|
56
|
+
/*
|
|
57
|
+
Primary Wire text styling.
|
|
58
|
+
|
|
59
|
+
Readability choices:
|
|
60
|
+
- Slightly increased lineHeight for dense text blocks.
|
|
61
|
+
- Subtle letterSpacing improves legibility on mobile screens.
|
|
62
|
+
*/
|
|
25
63
|
color: "#ddd",
|
|
26
64
|
fontSize: 15,
|
|
27
65
|
lineHeight: 22,
|
|
@@ -29,6 +67,13 @@ export const WireCardLayoutStyles = StyleSheet.create({
|
|
|
29
67
|
},
|
|
30
68
|
|
|
31
69
|
seeMore: {
|
|
70
|
+
/*
|
|
71
|
+
"See more" affordance for truncated text.
|
|
72
|
+
|
|
73
|
+
Intent:
|
|
74
|
+
- Visually distinct but not dominant.
|
|
75
|
+
- Must remain tappable and readable on small screens.
|
|
76
|
+
*/
|
|
32
77
|
color: "#fff",
|
|
33
78
|
fontWeight: "600",
|
|
34
79
|
marginTop: 4,
|
|
@@ -1,8 +1,29 @@
|
|
|
1
1
|
import { Platform, StyleSheet } from "react-native";
|
|
2
2
|
import { globalStyles } from "./globalStyles";
|
|
3
3
|
|
|
4
|
+
/*
|
|
5
|
+
WireChannelMetadataStyles
|
|
6
|
+
|
|
7
|
+
Purpose:
|
|
8
|
+
Styles for rendering channel-level metadata on a Wire card,
|
|
9
|
+
including author info, subscription state, date, and view count.
|
|
10
|
+
|
|
11
|
+
Design constraints:
|
|
12
|
+
- Metadata must remain compact and right-aligned to avoid
|
|
13
|
+
competing with main Wire content.
|
|
14
|
+
- Font sizes are platform-tuned to maintain visual parity
|
|
15
|
+
between iOS and Android.
|
|
16
|
+
*/
|
|
17
|
+
|
|
4
18
|
export const WireChannelMetadataStyles = StyleSheet.create({
|
|
5
19
|
dateViewsContainer: {
|
|
20
|
+
/*
|
|
21
|
+
Container for date and view count metadata.
|
|
22
|
+
|
|
23
|
+
Intent:
|
|
24
|
+
- Column layout keeps metadata vertically stacked.
|
|
25
|
+
- Right alignment ensures consistent edge anchoring in feeds.
|
|
26
|
+
*/
|
|
6
27
|
flexDirection: "column",
|
|
7
28
|
width: "auto",
|
|
8
29
|
justifyContent: "center",
|
|
@@ -10,63 +31,95 @@ export const WireChannelMetadataStyles = StyleSheet.create({
|
|
|
10
31
|
},
|
|
11
32
|
|
|
12
33
|
dateContainer: {
|
|
34
|
+
/*
|
|
35
|
+
Wrapper for date icon + text.
|
|
36
|
+
Row layout allows optional icon insertion without layout changes.
|
|
37
|
+
*/
|
|
13
38
|
flexDirection: "row",
|
|
14
39
|
paddingBottom: 4,
|
|
15
|
-
// rowGap: 20,
|
|
16
40
|
},
|
|
17
41
|
|
|
18
|
-
// dateIcon: {
|
|
19
|
-
// marginRight: 8,
|
|
20
|
-
// },
|
|
21
|
-
|
|
22
42
|
viewsContainer: {
|
|
43
|
+
/*
|
|
44
|
+
Wrapper for views icon + text.
|
|
45
|
+
Kept separate from date for independent spacing control.
|
|
46
|
+
*/
|
|
23
47
|
flexDirection: "row",
|
|
24
48
|
justifyContent: "flex-end",
|
|
25
49
|
},
|
|
26
50
|
|
|
27
|
-
// eyeIcon: {
|
|
28
|
-
// marginRight: 8,
|
|
29
|
-
// },
|
|
30
|
-
|
|
31
51
|
dateText: {
|
|
52
|
+
/*
|
|
53
|
+
Date text styling.
|
|
54
|
+
|
|
55
|
+
Platform note:
|
|
56
|
+
- iOS text renders visually smaller at the same fontSize,
|
|
57
|
+
so sizes are adjusted for parity.
|
|
58
|
+
*/
|
|
32
59
|
color: globalStyles.colors.colorPrimary600,
|
|
33
60
|
marginRight: 8,
|
|
34
61
|
fontSize: Platform.OS === "ios" ? 14 : 12,
|
|
35
62
|
},
|
|
36
63
|
|
|
37
64
|
viewsText: {
|
|
65
|
+
/*
|
|
66
|
+
Views count text styling.
|
|
67
|
+
Intentionally matches dateText for visual consistency.
|
|
68
|
+
*/
|
|
38
69
|
color: globalStyles.colors.colorPrimary600,
|
|
39
70
|
marginRight: 8,
|
|
40
71
|
fontSize: Platform.OS === "ios" ? 14 : 12,
|
|
41
72
|
},
|
|
42
73
|
|
|
43
74
|
channelMetaContainer: {
|
|
75
|
+
/*
|
|
76
|
+
Primary container for channel metadata row.
|
|
77
|
+
|
|
78
|
+
Intent:
|
|
79
|
+
- Separates channel identity from Wire content.
|
|
80
|
+
- Uses global tokens to remain consistent across surfaces.
|
|
81
|
+
*/
|
|
44
82
|
width: "auto",
|
|
45
83
|
flexDirection: "row",
|
|
46
84
|
backgroundColor: globalStyles.colors.colorPrimary200,
|
|
47
85
|
justifyContent: "space-between",
|
|
48
|
-
// margin: 12,
|
|
49
86
|
padding: 12,
|
|
50
87
|
borderRadius: globalStyles.borders.borderPrimary100,
|
|
51
88
|
},
|
|
52
89
|
|
|
53
90
|
channelMetaContainer_ColumnOne: {
|
|
91
|
+
/*
|
|
92
|
+
Left column containing user avatar and identity.
|
|
93
|
+
*/
|
|
54
94
|
flexDirection: "row",
|
|
55
95
|
},
|
|
56
96
|
|
|
57
97
|
userImage: {
|
|
98
|
+
/*
|
|
99
|
+
Channel/user avatar.
|
|
100
|
+
|
|
101
|
+
Constraint:
|
|
102
|
+
- Fixed size ensures layout stability across feeds.
|
|
103
|
+
*/
|
|
58
104
|
width: 40,
|
|
59
105
|
height: 40,
|
|
60
106
|
borderRadius: globalStyles.borders.borderPrimary50,
|
|
61
107
|
},
|
|
62
108
|
|
|
63
109
|
nameSubcountContainer: {
|
|
110
|
+
/*
|
|
111
|
+
Wrapper for username and subscriber count.
|
|
112
|
+
*/
|
|
64
113
|
flexDirection: "column",
|
|
65
114
|
justifyContent: "center",
|
|
66
115
|
paddingLeft: 12,
|
|
67
116
|
},
|
|
68
117
|
|
|
69
118
|
userName: {
|
|
119
|
+
/*
|
|
120
|
+
Channel display name.
|
|
121
|
+
Strong visual weight to establish authorship.
|
|
122
|
+
*/
|
|
70
123
|
color: "#fff",
|
|
71
124
|
fontSize: 16,
|
|
72
125
|
paddingBottom: 4,
|
|
@@ -74,10 +127,17 @@ export const WireChannelMetadataStyles = StyleSheet.create({
|
|
|
74
127
|
},
|
|
75
128
|
|
|
76
129
|
subCountContainer: {
|
|
130
|
+
/*
|
|
131
|
+
Row container for subscriber count + label.
|
|
132
|
+
*/
|
|
77
133
|
flexDirection: "row",
|
|
78
134
|
},
|
|
79
135
|
|
|
80
136
|
subCount: {
|
|
137
|
+
/*
|
|
138
|
+
Numeric subscriber count.
|
|
139
|
+
Highlighted to draw attention without overpowering username.
|
|
140
|
+
*/
|
|
81
141
|
color: globalStyles.colors.colorPrimary600,
|
|
82
142
|
paddingRight: 6,
|
|
83
143
|
fontSize: 12,
|
|
@@ -85,11 +145,20 @@ export const WireChannelMetadataStyles = StyleSheet.create({
|
|
|
85
145
|
},
|
|
86
146
|
|
|
87
147
|
subText: {
|
|
148
|
+
/*
|
|
149
|
+
Subscriber label text.
|
|
150
|
+
*/
|
|
88
151
|
color: "#fff",
|
|
89
152
|
fontSize: 12,
|
|
90
153
|
},
|
|
91
154
|
|
|
92
155
|
subscribeButtonContainer: {
|
|
156
|
+
/*
|
|
157
|
+
Subscribe / subscribed action button.
|
|
158
|
+
|
|
159
|
+
Constraint:
|
|
160
|
+
- Fixed width ensures consistent hit area.
|
|
161
|
+
*/
|
|
93
162
|
backgroundColor: globalStyles.colors.colorPrimary600,
|
|
94
163
|
width: 100,
|
|
95
164
|
borderRadius: globalStyles.borders.borderPrimary400,
|
|
@@ -98,6 +167,9 @@ export const WireChannelMetadataStyles = StyleSheet.create({
|
|
|
98
167
|
},
|
|
99
168
|
|
|
100
169
|
subscribeButtonText: {
|
|
170
|
+
/*
|
|
171
|
+
Subscribe button label.
|
|
172
|
+
*/
|
|
101
173
|
color: "#fff",
|
|
102
174
|
fontWeight: "bold",
|
|
103
175
|
},
|
|
@@ -1,20 +1,42 @@
|
|
|
1
1
|
import { StyleSheet } from "react-native";
|
|
2
2
|
import { globalStyles } from "./globalStyles";
|
|
3
3
|
|
|
4
|
+
/*
|
|
5
|
+
WireUploadStyles
|
|
6
|
+
|
|
7
|
+
Purpose:
|
|
8
|
+
Styles for the Wire creation / upload screen, including
|
|
9
|
+
user identity, text input, media previews, and upload actions.
|
|
10
|
+
|
|
11
|
+
Design constraints:
|
|
12
|
+
- Screen must scroll comfortably on small devices.
|
|
13
|
+
- Text input must support long-form drafting without breaking layout.
|
|
14
|
+
- Media previews are constrained to predictable sizes.
|
|
15
|
+
*/
|
|
16
|
+
|
|
4
17
|
export const WireUploadStyles = StyleSheet.create({
|
|
5
18
|
container: {
|
|
19
|
+
/*
|
|
20
|
+
Root container for the Wire upload screen.
|
|
21
|
+
|
|
22
|
+
Constraint:
|
|
23
|
+
- Bottom margin reserves space for fixed navigation / actions.
|
|
24
|
+
*/
|
|
6
25
|
flex: 1,
|
|
7
26
|
backgroundColor: "#141414",
|
|
8
27
|
marginBottom: 120,
|
|
9
|
-
// paddingHorizontal: 16,
|
|
10
|
-
// paddingTop: 20,
|
|
11
28
|
},
|
|
12
29
|
|
|
13
30
|
profileSection: {
|
|
31
|
+
/*
|
|
32
|
+
Top section displaying user identity and channel access.
|
|
33
|
+
|
|
34
|
+
Intent:
|
|
35
|
+
- Visually anchors authorship before content creation.
|
|
36
|
+
- Bottom border separates identity from input area.
|
|
37
|
+
*/
|
|
14
38
|
flexDirection: "row",
|
|
15
39
|
alignItems: "center",
|
|
16
|
-
// paddingHorizontal: 36,
|
|
17
|
-
|
|
18
40
|
borderBottomWidth: 1,
|
|
19
41
|
paddingTop: 18,
|
|
20
42
|
paddingBottom: 18,
|
|
@@ -22,40 +44,68 @@ export const WireUploadStyles = StyleSheet.create({
|
|
|
22
44
|
marginRight: 36,
|
|
23
45
|
borderColor: globalStyles.colors.colorPrimary450,
|
|
24
46
|
},
|
|
47
|
+
|
|
25
48
|
userImage: {
|
|
49
|
+
/*
|
|
50
|
+
User avatar in upload context.
|
|
51
|
+
Slightly larger than feed avatars to emphasize authorship.
|
|
52
|
+
*/
|
|
26
53
|
width: 60,
|
|
27
54
|
height: 60,
|
|
28
55
|
borderRadius: 12,
|
|
29
56
|
marginRight: 16,
|
|
30
57
|
},
|
|
58
|
+
|
|
31
59
|
userInfo: {
|
|
60
|
+
/*
|
|
61
|
+
Wrapper for username and channel settings link.
|
|
62
|
+
*/
|
|
32
63
|
flexDirection: "column",
|
|
33
64
|
justifyContent: "center",
|
|
34
65
|
},
|
|
66
|
+
|
|
35
67
|
userName: {
|
|
68
|
+
/*
|
|
69
|
+
Display name of the active channel/user.
|
|
70
|
+
*/
|
|
36
71
|
color: "white",
|
|
37
72
|
fontSize: 18,
|
|
38
73
|
fontWeight: "600",
|
|
39
74
|
},
|
|
75
|
+
|
|
40
76
|
channelSettingsText: {
|
|
77
|
+
/*
|
|
78
|
+
Link-style text for channel settings access.
|
|
79
|
+
Intentionally accent-colored to signal interactivity.
|
|
80
|
+
*/
|
|
41
81
|
color: "#ff6600",
|
|
42
82
|
marginTop: 4,
|
|
43
83
|
},
|
|
44
84
|
|
|
45
|
-
// /////////////////
|
|
46
|
-
|
|
47
85
|
wireInputContainer: {
|
|
86
|
+
/*
|
|
87
|
+
Outer container for Wire text input and media.
|
|
88
|
+
*/
|
|
48
89
|
marginRight: 24,
|
|
49
90
|
marginLeft: 24,
|
|
50
91
|
marginTop: 24,
|
|
51
92
|
},
|
|
52
93
|
|
|
53
94
|
wireInputTextContainer: {
|
|
95
|
+
/*
|
|
96
|
+
Visual wrapper around the text input area.
|
|
97
|
+
*/
|
|
54
98
|
backgroundColor: "#202020",
|
|
55
99
|
borderRadius: 12,
|
|
56
100
|
},
|
|
57
101
|
|
|
58
102
|
inputWrapper: {
|
|
103
|
+
/*
|
|
104
|
+
Inner wrapper for text input.
|
|
105
|
+
|
|
106
|
+
Constraint:
|
|
107
|
+
- Bottom corners remain square to visually attach media previews.
|
|
108
|
+
*/
|
|
59
109
|
backgroundColor: "#202020",
|
|
60
110
|
width: "auto",
|
|
61
111
|
borderBottomRightRadius: 0,
|
|
@@ -63,15 +113,19 @@ export const WireUploadStyles = StyleSheet.create({
|
|
|
63
113
|
},
|
|
64
114
|
|
|
65
115
|
aboutTextArea: {
|
|
116
|
+
/*
|
|
117
|
+
Main Wire text input.
|
|
118
|
+
|
|
119
|
+
Intent:
|
|
120
|
+
- Supports long-form drafting.
|
|
121
|
+
- Preserves whitespace for intentional line breaks.
|
|
122
|
+
*/
|
|
66
123
|
textAlignVertical: "top",
|
|
67
|
-
// whiteSpace: "pre-line",
|
|
68
124
|
whiteSpace: "pre",
|
|
69
|
-
|
|
70
125
|
height: "auto",
|
|
71
126
|
minHeight: 200,
|
|
72
127
|
color: "white",
|
|
73
128
|
paddingTop: 16,
|
|
74
|
-
marginTop: 0,
|
|
75
129
|
lineHeight: 24,
|
|
76
130
|
fontWeight: 400,
|
|
77
131
|
fontSize: 18,
|
|
@@ -79,33 +133,45 @@ export const WireUploadStyles = StyleSheet.create({
|
|
|
79
133
|
},
|
|
80
134
|
|
|
81
135
|
media: {
|
|
136
|
+
/*
|
|
137
|
+
Large media preview (single attachment).
|
|
138
|
+
*/
|
|
82
139
|
width: "auto",
|
|
83
140
|
height: 200,
|
|
84
141
|
borderRadius: 14,
|
|
85
|
-
// marginBottom: 16,
|
|
86
142
|
backgroundColor: "#000",
|
|
87
143
|
},
|
|
88
144
|
|
|
89
145
|
uploadButtonContainer: {
|
|
146
|
+
/*
|
|
147
|
+
Container for upload-related action buttons.
|
|
148
|
+
*/
|
|
90
149
|
flexDirection: "row",
|
|
91
150
|
alignItems: "center",
|
|
92
151
|
justifyContent: "flex-end",
|
|
93
152
|
},
|
|
94
153
|
|
|
95
154
|
AIGenerateButton: {
|
|
155
|
+
/*
|
|
156
|
+
Optional AI-assisted content generation action.
|
|
157
|
+
*/
|
|
96
158
|
paddingRight: 24,
|
|
97
159
|
},
|
|
98
160
|
|
|
99
161
|
uploadImageButton: {
|
|
162
|
+
/*
|
|
163
|
+
Media upload action.
|
|
164
|
+
Padding increases tap target for accessibility.
|
|
165
|
+
*/
|
|
100
166
|
paddingRight: 24,
|
|
101
|
-
// backgroundColor: "#252525",
|
|
102
167
|
paddingVertical: 24,
|
|
103
168
|
borderRadius: 12,
|
|
104
|
-
// marginBottom: 20,
|
|
105
|
-
// marginTop: 20,
|
|
106
169
|
},
|
|
107
170
|
|
|
108
171
|
uploadButtonText: {
|
|
172
|
+
/*
|
|
173
|
+
Label for upload-related buttons.
|
|
174
|
+
*/
|
|
109
175
|
color: "#fff",
|
|
110
176
|
fontSize: 14,
|
|
111
177
|
fontWeight: "600",
|
|
@@ -113,6 +179,12 @@ export const WireUploadStyles = StyleSheet.create({
|
|
|
113
179
|
},
|
|
114
180
|
|
|
115
181
|
mediaContainer: {
|
|
182
|
+
/*
|
|
183
|
+
Grid container for multiple media thumbnails.
|
|
184
|
+
|
|
185
|
+
Constraint:
|
|
186
|
+
- Uses wrapping and even spacing to handle variable counts.
|
|
187
|
+
*/
|
|
116
188
|
flexDirection: "row",
|
|
117
189
|
flexWrap: "wrap",
|
|
118
190
|
gap: 10,
|
|
@@ -124,6 +196,9 @@ export const WireUploadStyles = StyleSheet.create({
|
|
|
124
196
|
},
|
|
125
197
|
|
|
126
198
|
mediaThumb: {
|
|
199
|
+
/*
|
|
200
|
+
Individual media thumbnail preview.
|
|
201
|
+
*/
|
|
127
202
|
width: 120,
|
|
128
203
|
height: 120,
|
|
129
204
|
borderRadius: 12,
|
|
@@ -1,8 +1,29 @@
|
|
|
1
1
|
import { StyleSheet } from "react-native";
|
|
2
2
|
import { globalStyles } from "./globalStyles";
|
|
3
3
|
|
|
4
|
+
/*
|
|
5
|
+
WireViewLayoutStyles
|
|
6
|
+
|
|
7
|
+
Purpose:
|
|
8
|
+
Styles for the full Wire view screen, where a single Wire
|
|
9
|
+
is read in isolation (expanded, focused context).
|
|
10
|
+
|
|
11
|
+
Design constraints:
|
|
12
|
+
- Prioritize long-form readability over feed density.
|
|
13
|
+
- Spacing is intentionally more generous than card layouts.
|
|
14
|
+
- Bottom margin reserves space for fixed actions or navigation.
|
|
15
|
+
*/
|
|
16
|
+
|
|
4
17
|
export const WireViewLayoutStyles = StyleSheet.create({
|
|
5
18
|
container: {
|
|
19
|
+
/*
|
|
20
|
+
Primary container for an expanded Wire.
|
|
21
|
+
|
|
22
|
+
Intent:
|
|
23
|
+
- Acts as a reading surface, not a feed card.
|
|
24
|
+
- Increased horizontal padding improves text legibility.
|
|
25
|
+
- Bottom margin prevents overlap with persistent UI elements.
|
|
26
|
+
*/
|
|
6
27
|
width: "auto",
|
|
7
28
|
margin: 12,
|
|
8
29
|
paddingTop: 12,
|
|
@@ -15,11 +36,25 @@ export const WireViewLayoutStyles = StyleSheet.create({
|
|
|
15
36
|
},
|
|
16
37
|
|
|
17
38
|
secondaryContainer: {
|
|
39
|
+
/*
|
|
40
|
+
Inner vertical stack for content blocks
|
|
41
|
+
(text, metadata, media, actions).
|
|
42
|
+
|
|
43
|
+
Constraint:
|
|
44
|
+
- Column layout ensures predictable reading flow.
|
|
45
|
+
*/
|
|
18
46
|
flexDirection: "column",
|
|
19
47
|
paddingBottom: 24,
|
|
20
48
|
},
|
|
21
49
|
|
|
22
50
|
mainText: {
|
|
51
|
+
/*
|
|
52
|
+
Primary Wire text in expanded view.
|
|
53
|
+
|
|
54
|
+
Readability choices:
|
|
55
|
+
- Larger fontSize and lineHeight than feed cards.
|
|
56
|
+
- Optimized for sustained reading, not scanning.
|
|
57
|
+
*/
|
|
23
58
|
color: "#fff",
|
|
24
59
|
lineHeight: 28,
|
|
25
60
|
fontSize: 18,
|