@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

[Redesign] Convert Dashboard Panels to ObjectBox

Summary: Moves Dashboard Panels to use PHUIObjectBoxView and PHUIHeaderView

Test Plan:
Tested the most common dashboards, Differential, Maniphest, Projects, Feed, Audit. Some edge cases (Legalpad, Macro) still are in progress. Tested laying out a new Dashboard, removing panels, moving panels.

{F406170}

Reviewers: btrahan, epriestley

Reviewed By: epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T8099

Differential Revision: https://secure.phabricator.com/D12873

+158 -159
+15 -15
resources/celerity/map.php
··· 7 7 */ 8 8 return array( 9 9 'names' => array( 10 - 'core.pkg.css' => '3d5bd914', 10 + 'core.pkg.css' => '6a6be483', 11 11 'core.pkg.js' => 'f3e08b38', 12 12 'darkconsole.pkg.js' => 'e7393ebb', 13 13 'differential.pkg.css' => 'bb338e4b', ··· 54 54 'rsrc/css/application/conpherence/widget-pane.css' => '2af42ebe', 55 55 'rsrc/css/application/contentsource/content-source-view.css' => '4b8b05d4', 56 56 'rsrc/css/application/countdown/timer.css' => '86b7b0a0', 57 - 'rsrc/css/application/dashboard/dashboard.css' => 'db1d30b0', 57 + 'rsrc/css/application/dashboard/dashboard.css' => 'eb458607', 58 58 'rsrc/css/application/diff/inline-comment-summary.css' => 'eb5f8e8c', 59 59 'rsrc/css/application/differential/add-comment.css' => 'c47f8c40', 60 60 'rsrc/css/application/differential/changeset-view.css' => 'e19cfd6e', ··· 68 68 'rsrc/css/application/diffusion/diffusion-icons.css' => '9c5828da', 69 69 'rsrc/css/application/diffusion/diffusion-readme.css' => '2106ea08', 70 70 'rsrc/css/application/diffusion/diffusion-source.css' => '66fdf661', 71 - 'rsrc/css/application/feed/feed.css' => 'b513b5f4', 71 + 'rsrc/css/application/feed/feed.css' => 'f1aa8c11', 72 72 'rsrc/css/application/files/global-drag-and-drop.css' => '697324ad', 73 73 'rsrc/css/application/flag/flag.css' => '5337623f', 74 74 'rsrc/css/application/harbormaster/harbormaster.css' => '49d64eb4', ··· 123 123 'rsrc/css/phui/calendar/phui-calendar-list.css' => 'c1d0ca59', 124 124 'rsrc/css/phui/calendar/phui-calendar-month.css' => '75e6a2ee', 125 125 'rsrc/css/phui/calendar/phui-calendar.css' => '8675968e', 126 - 'rsrc/css/phui/phui-action-header-view.css' => 'e4471f43', 126 + 'rsrc/css/phui/phui-action-header-view.css' => 'd1cb5f81', 127 127 'rsrc/css/phui/phui-action-list.css' => '4f4d09f2', 128 128 'rsrc/css/phui/phui-action-panel.css' => '3ee9afd5', 129 129 'rsrc/css/phui/phui-box.css' => 'a5bb366d', ··· 134 134 'rsrc/css/phui/phui-fontkit.css' => '1e71371a', 135 135 'rsrc/css/phui/phui-form-view.css' => 'e1abbe8e', 136 136 'rsrc/css/phui/phui-form.css' => 'f535f938', 137 - 'rsrc/css/phui/phui-header-view.css' => '00898f29', 138 - 'rsrc/css/phui/phui-icon.css' => 'bc766998', 137 + 'rsrc/css/phui/phui-header-view.css' => '036ca2aa', 138 + 'rsrc/css/phui/phui-icon.css' => '88ba9081', 139 139 'rsrc/css/phui/phui-image-mask.css' => '5a8b09c8', 140 140 'rsrc/css/phui/phui-info-panel.css' => '27ea50a1', 141 141 'rsrc/css/phui/phui-info-view.css' => '33595731', 142 142 'rsrc/css/phui/phui-list.css' => '2e25ebfb', 143 - 'rsrc/css/phui/phui-object-box.css' => '3a601bc5', 144 - 'rsrc/css/phui/phui-object-item-list-view.css' => 'e052f697', 143 + 'rsrc/css/phui/phui-object-box.css' => '8d9239e5', 144 + 'rsrc/css/phui/phui-object-item-list-view.css' => '80c3d6fe', 145 145 'rsrc/css/phui/phui-pinboard-view.css' => 'eaab2b1b', 146 146 'rsrc/css/phui/phui-property-list-view.css' => 'd2d143ea', 147 147 'rsrc/css/phui/phui-remarkup-preview.css' => '19ad512b', ··· 702 702 'phabricator-content-source-view-css' => '4b8b05d4', 703 703 'phabricator-core-css' => '6230ff55', 704 704 'phabricator-countdown-css' => '86b7b0a0', 705 - 'phabricator-dashboard-css' => 'db1d30b0', 705 + 'phabricator-dashboard-css' => 'eb458607', 706 706 'phabricator-drag-and-drop-file-upload' => '07de8873', 707 707 'phabricator-draggable-list' => 'a16ec1c6', 708 708 'phabricator-fatal-config-template-css' => '8e6c6fcd', 709 - 'phabricator-feed-css' => 'b513b5f4', 709 + 'phabricator-feed-css' => 'f1aa8c11', 710 710 'phabricator-file-upload' => '477359c8', 711 711 'phabricator-filetree-view-css' => 'fccf9f82', 712 712 'phabricator-flag-css' => '5337623f', ··· 754 754 'phortune-css' => '9149f103', 755 755 'phrequent-css' => 'ffc185ad', 756 756 'phriction-document-css' => '0d16bc9a', 757 - 'phui-action-header-view-css' => 'e4471f43', 757 + 'phui-action-header-view-css' => 'd1cb5f81', 758 758 'phui-action-panel-css' => '3ee9afd5', 759 759 'phui-box-css' => 'a5bb366d', 760 760 'phui-button-css' => 'b995182d', ··· 769 769 'phui-fontkit-css' => '1e71371a', 770 770 'phui-form-css' => 'f535f938', 771 771 'phui-form-view-css' => 'e1abbe8e', 772 - 'phui-header-view-css' => '00898f29', 773 - 'phui-icon-view-css' => 'bc766998', 772 + 'phui-header-view-css' => '036ca2aa', 773 + 'phui-icon-view-css' => '88ba9081', 774 774 'phui-image-mask-css' => '5a8b09c8', 775 775 'phui-info-panel-css' => '27ea50a1', 776 776 'phui-info-view-css' => '33595731', 777 777 'phui-inline-comment-view-css' => '2174771a', 778 778 'phui-list-view-css' => '2e25ebfb', 779 - 'phui-object-box-css' => '3a601bc5', 780 - 'phui-object-item-list-view-css' => 'e052f697', 779 + 'phui-object-box-css' => '8d9239e5', 780 + 'phui-object-item-list-view-css' => '80c3d6fe', 781 781 'phui-pinboard-view-css' => 'eaab2b1b', 782 782 'phui-property-list-view-css' => 'd2d143ea', 783 783 'phui-remarkup-preview-css' => '19ad512b',
+1
src/applications/celerity/CelerityResourceTransformer.php
··· 191 191 'lightblue' => '#daeaf3', 192 192 'sky' => '#3498db', 193 193 'lightsky' => '#ddeef9', 194 + 'fire' => '#fa4b2a', 194 195 'indigo' => '#6e5cb6', 195 196 'lightindigo' => '#eae6f7', 196 197 'pink' => '#da49be',
+19 -29
src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php
··· 154 154 $header = null; 155 155 break; 156 156 case self::HEADER_MODE_EDIT: 157 - $header = id(new PHUIActionHeaderView()) 158 - ->setHeaderTitle($title) 159 - ->setHeaderColor(PHUIActionHeaderView::HEADER_LIGHTBLUE); 157 + $header = id(new PHUIHeaderView()) 158 + ->setHeader($title); 160 159 $header = $this->addPanelHeaderActions($header); 161 160 break; 162 161 case self::HEADER_MODE_NORMAL: 163 162 default: 164 - $header = id(new PHUIActionHeaderView()) 165 - ->setHeaderTitle($title) 166 - ->setHeaderColor(PHUIActionHeaderView::HEADER_LIGHTBLUE); 163 + $header = id(new PHUIHeaderView()) 164 + ->setHeaderTitle($title); 167 165 break; 168 166 } 169 167 $icon = id(new PHUIIconView()) ··· 187 185 if (!$id) { 188 186 $id = celerity_generate_unique_node_id(); 189 187 } 190 - return javelin_tag( 191 - 'div', 192 - array( 193 - 'id' => $id, 194 - 'sigil' => 'dashboard-panel', 195 - 'meta' => array( 196 - 'objectPHID' => $panel->getPHID(), 197 - ), 198 - 'class' => 'dashboard-panel', 199 - ), 200 - array( 201 - $header, 202 - $content, 203 - )); 188 + $box = id(new PHUIObjectBoxView()) 189 + ->setHeader($header) 190 + ->appendChild($content) 191 + ->setID($id) 192 + ->addSigil('dashboard-panel') 193 + ->setMetadata(array('objectPHID' => $panel->getPHID())); 194 + 195 + return phutil_tag_div('dashboard-pane', $box); 204 196 } 205 197 206 198 ··· 212 204 $header = null; 213 205 break; 214 206 case self::HEADER_MODE_EDIT: 215 - $header = id(new PHUIActionHeaderView()) 216 - ->setHeaderTitle($panel->getName()) 217 - ->setHeaderColor(PHUIActionHeaderView::HEADER_WHITE); 207 + $header = id(new PHUIHeaderView()) 208 + ->setHeader($panel->getName()); 218 209 $header = $this->addPanelHeaderActions($header); 219 210 break; 220 211 case self::HEADER_MODE_NORMAL: 221 212 default: 222 - $header = id(new PHUIActionHeaderView()) 223 - ->setHeaderTitle($panel->getName()) 224 - ->setHeaderColor(PHUIActionHeaderView::HEADER_WHITE); 213 + $header = id(new PHUIHeaderView()) 214 + ->setHeader($panel->getName()); 225 215 $panel_type = $panel->getImplementation(); 226 216 $header = $panel_type->adjustPanelHeader( 227 217 $this->getViewer(), ··· 234 224 } 235 225 236 226 private function addPanelHeaderActions( 237 - PHUIActionHeaderView $header) { 227 + PHUIHeaderView $header) { 238 228 $panel = $this->getPanel(); 239 229 240 230 $dashboard_id = $this->getDashboardID(); ··· 247 237 ->setIconFont('fa-pencil') 248 238 ->setWorkflow(true) 249 239 ->setHref((string) $edit_uri); 250 - $header->addAction($action_edit); 240 + $header->addActionIcon($action_edit); 251 241 252 242 if ($dashboard_id) { 253 243 $uri = id(new PhutilURI( ··· 257 247 ->setIconFont('fa-trash-o') 258 248 ->setHref((string) $uri) 259 249 ->setWorkflow(true); 260 - $header->addAction($action_remove); 250 + $header->addActionIcon($action_remove); 261 251 } 262 252 return $header; 263 253 }
+1 -1
src/applications/dashboard/paneltype/PhabricatorDashboardPanelType.php
··· 41 41 PhabricatorUser $viewer, 42 42 PhabricatorDashboardPanel $panel, 43 43 PhabricatorDashboardPanelRenderingEngine $engine, 44 - PHUIActionHeaderView $header) { 44 + PHUIHeaderView $header) { 45 45 return $header; 46 46 } 47 47
+6 -2
src/applications/dashboard/paneltype/PhabricatorDashboardQueryPanelType.php
··· 111 111 PhabricatorUser $viewer, 112 112 PhabricatorDashboardPanel $panel, 113 113 PhabricatorDashboardPanelRenderingEngine $engine, 114 - PHUIActionHeaderView $header) { 114 + PHUIHeaderView $header) { 115 115 116 116 $search_engine = $this->getSearchEngine($panel); 117 117 $key = $panel->getProperty('key'); 118 - $header->setHeaderHref($search_engine->getQueryResultsPageURI($key)); 118 + $href = $search_engine->getQueryResultsPageURI($key); 119 + $icon = id(new PHUIIconView()) 120 + ->setIconFont('fa-search') 121 + ->setHref($href); 122 + $header->addActionIcon($icon); 119 123 120 124 return $header; 121 125 }
+25
src/view/phui/PHUIHeaderView.php
··· 18 18 private $buttonBar = null; 19 19 private $policyObject; 20 20 private $epoch; 21 + private $actionIcons = array(); 21 22 22 23 public function setHeader($header) { 23 24 $this->header = $header; ··· 76 77 77 78 public function addActionLink(PHUIButtonView $button) { 78 79 $this->actionLinks[] = $button; 80 + return $this; 81 + } 82 + 83 + public function addActionIcon(PHUIIconView $action) { 84 + $this->actionIcons[] = $action; 79 85 return $this; 80 86 } 81 87 ··· 198 204 ), 199 205 $this->buttonBar); 200 206 } 207 + 208 + if ($this->actionIcons) { 209 + $action_list = array(); 210 + foreach ($this->actionIcons as $icon) { 211 + $action_list[] = phutil_tag( 212 + 'li', 213 + array( 214 + 'class' => 'phui-header-list-icon', 215 + ), 216 + $icon); 217 + } 218 + $header[] = phutil_tag( 219 + 'ul', 220 + array( 221 + 'class' => 'phui-header-icon-list', 222 + ), 223 + $action_list); 224 + } 225 + 201 226 $header[] = $this->header; 202 227 203 228 if ($this->objectName) {
+1 -1
src/view/phui/PHUIObjectItemView.php
··· 422 422 423 423 if ($this->handleIcons) { 424 424 $handle_bar = array(); 425 - foreach ($this->handleIcon as $handleicon) { 425 + foreach ($this->handleIcons as $handleicon) { 426 426 $handle_bar[] = 427 427 $this->renderHandleIcon($handleicon['icon'], $handleicon['label']); 428 428 }
+7 -13
webroot/rsrc/css/application/dashboard/dashboard.css
··· 10 10 margin: 8px; 11 11 } 12 12 13 - .dashboard-panel + .dashboard-panel { 14 - margin-top: 16px; 13 + .dashboard-view .phui-object-box { 14 + margin: 0 0 16px 0; 15 + } 16 + 17 + .dashboard-view .phui-object-box .phui-object-box { 18 + margin: 0; 15 19 } 16 20 17 21 .device-desktop .aphront-multi-column-fluid .aphront-multi-column-2-up ··· 31 35 32 36 .aphront-multi-column-fluid 33 37 .aphront-multi-column-column-outer.grippable 34 - .aphront-multi-column-column .dashboard-panel { 38 + .aphront-multi-column-column .dashboard-pane { 35 39 cursor: move; 36 40 } 37 41 ··· 69 73 .aphront-multi-column-column .phui-info-view { 70 74 margin: 0; 71 75 } 72 - 73 - .dashboard-panel .phui-object-item-empty .phui-info-view { 74 - margin: 0; 75 - } 76 - 77 - .dashboard-panel .dashboard-box { 78 - padding: 12px; 79 - background: #fff; 80 - border: 1px solid {$lightblueborder}; 81 - }
+13 -17
webroot/rsrc/css/application/feed/feed.css
··· 54 54 55 55 /* - Dashboards ------------------------------------------------------------ */ 56 56 57 - .dashboard-panel div.phabricator-feed-frame { 58 - background: #fff; 57 + .dashboard-pane div.phabricator-feed-frame { 59 58 margin: 0; 60 - border-left: 1px solid {$lightblueborder}; 61 - border-right: 1px solid {$lightblueborder}; 62 - border-bottom: 1px solid {$blueborder}; 63 59 max-width: none; 64 60 } 65 61 66 - .dashboard-panel .phabricator-feed-frame .phui-action-header { 62 + .dashboard-pane .phabricator-feed-frame .phui-action-header { 67 63 background: #f7f7f7; 68 - margin-top: -1px; 69 - border-top: 1px solid {$thinblueborder}; 70 64 } 71 65 72 - .dashboard-panel .phabricator-feed-frame .phui-action-header-title { 66 + .dashboard-pane .phabricator-feed-frame .phui-action-header-title { 73 67 font-size: 13px; 74 68 margin-left: 12px; 69 + padding: 8px 0; 75 70 margin-bottom: 0; 76 71 color: {$bluetext}; 72 + font-weight: bold; 77 73 } 78 74 79 - .dashboard-panel .phabricator-feed-frame .phui-feed-story { 75 + .dashboard-pane .phabricator-feed-frame .phui-feed-story { 80 76 border: none; 81 77 border-bottom: 1px solid {$thinblueborder}; 82 78 margin: 0 8px; 83 79 } 84 80 85 - .dashboard-panel .phabricator-feed-frame .phui-feed-story-head { 86 - padding: 8px 0; 81 + .dashboard-pane .phabricator-feed-frame .phui-feed-story-head { 82 + padding: 12px 0; 87 83 } 88 84 89 - .dashboard-panel .phabricator-feed-frame .phui-feed-story-body { 90 - margin: 8px 0; 85 + .dashboard-pane .phabricator-feed-frame .phui-feed-story-body { 86 + margin: 12px 0; 91 87 } 92 88 93 - .dashboard-panel .phabricator-feed-frame .phui-feed-story-foot { 89 + .dashboard-pane .phabricator-feed-frame .phui-feed-story-foot { 94 90 background: #fff; 95 - padding: 8px 0; 91 + padding: 12px 0; 96 92 } 97 93 98 - .dashboard-panel .phabricator-feed-frame 94 + .dashboard-pane .phabricator-feed-frame 99 95 .phabricator-feed-story-date-separator { 100 96 margin-top: 0; 101 97 }
-21
webroot/rsrc/css/phui/phui-action-header-view.css
··· 83 83 font-weight: normal; 84 84 color: {$lightgreytext}; 85 85 } 86 - 87 - /* - Dashboards ------------------------------------------------------------ */ 88 - 89 - .dashboard-panel .phui-action-header.gradient-grey-header, 90 - .dashboard-panel .phui-action-header.gradient-lightblue-header { 91 - border: 1px solid {$lightblueborder}; 92 - border-bottom: 1px solid {$thinblueborder}; 93 - } 94 - 95 - .dashboard-panel .phui-action-header.gradient-white-header { 96 - border: 1px solid {$lightblueborder}; 97 - border-bottom: 1px solid {$thinblueborder}; 98 - border-top-right-radius: 3px; 99 - border-top-left-radius: 3px; 100 - } 101 - 102 - .dashboard-panel .phui-action-header.gradient-white-header 103 - .phui-action-header-icon-list { 104 - padding-top: 6px; 105 - padding-right: 6px; 106 - }
+9
webroot/rsrc/css/phui/phui-header-view.css
··· 146 146 .device .phui-header-action-links .phui-mobile-menu { 147 147 display: inline-block; 148 148 } 149 + 150 + .phui-header-icon-list { 151 + float: right; 152 + } 153 + 154 + .phui-header-icon-list .phui-header-list-icon { 155 + margin: 0 4px; 156 + float: right; 157 + }
+1
webroot/rsrc/css/phui/phui-icon.css
··· 36 36 37 37 a.phui-icon-view:hover { 38 38 text-decoration: none; 39 + color: {$sky}; 39 40 }
+30
webroot/rsrc/css/phui/phui-object-box.css
··· 69 69 .phui-box-border.phui-object-box-lightviolet .phui-action-header { 70 70 border-bottom: 1px solid {$lightvioletborder}; 71 71 } 72 + 73 + /* - Double Object Box Override --------------------------------------------- */ 74 + 75 + .phui-object-box .phui-object-box { 76 + padding: 0; 77 + } 78 + 79 + .phui-object-box .phui-box-border { 80 + border-width: 0; 81 + padding: 0; 82 + margin: 0; 83 + } 84 + 85 + .phui-object-box .phui-object-box .phui-header-shell h1 { 86 + background-color: {$lightgreybackground}; 87 + padding: 8px 12px; 88 + font-size: 13px; 89 + margin: 0; 90 + color: {$bluetext}; 91 + font-weight: 500; 92 + } 93 + 94 + .phui-object-box .phui-object-box .phui-header-shell { 95 + margin: 0; 96 + padding: 0; 97 + } 98 + 99 + .phui-box-border + .phui-box-border { 100 + border-top: 1px solid {$thinblueborder}; 101 + }
+30 -60
webroot/rsrc/css/phui/phui-object-item-list-view.css
··· 20 20 margin: 0; 21 21 } 22 22 23 - .phui-object-box .phui-object-item-list-view .phui-object-item, 24 - .homepage-panel .phui-object-list-flush .phui-object-item { 23 + .phui-object-box .phui-object-item-list-view .phui-object-item { 25 24 margin: 0; 26 25 } 27 26 ··· 60 59 } 61 60 62 61 .phui-object-box .phui-object-list-flush .phui-object-item { 62 + margin: 0; 63 + } 64 + 65 + .phui-object-box .phui-object-item-list-view { 63 66 margin: 0; 64 67 } 65 68 ··· 562 565 opacity: 0.5; 563 566 } 564 567 565 - /* - Plain --------------------------------------------------------------------- 566 - 567 - Remove all border styles, just a list of objects 568 - 569 - */ 570 - 571 - .phui-object-list-plain .phui-object-item { 572 - background: transparent; 573 - } 574 - 575 - .phui-object-list-plain .phui-object-item, 576 - .phui-object-list-plain .phui-object-item-frame { 577 - border: none; 578 - } 579 - 580 - .phui-object-list-plain .phui-object-item-attributes, 581 - .phui-object-list-plain .phui-object-item-name { 582 - padding-left: 0; 583 - padding-top: 0; 584 - } 585 - 586 - .phui-object-item-image { 587 - width: 40px; 588 - height: 40px; 589 - background-size: 100%; 590 - margin: 6px; 591 - position: absolute; 592 - background-color: {$lightbluebackground}; 593 - } 594 - 595 - .phui-object-item-with-image .phui-object-item-frame { 596 - min-height: 52px; 597 - } 598 - 599 - .phui-object-item-with-image .phui-object-item-content-box { 600 - margin-left: 46px; 601 - } 602 - 603 568 /* - State --------------------------------------------------------------------- 604 569 605 570 Provides a list of object status or states, success or fail, etc ··· 638 603 margin-bottom: -1px; 639 604 } 640 605 641 - .dashboard-panel .phui-object-item-list-view .phui-object-item, 642 - .phui-object-box .phui-object-item-list-view { 643 - margin: 0; 644 - background-image: none; 645 - background-color: #fff; 646 - } 647 - 648 606 .dashboard-panel .phui-object-item-frame, 649 607 .phui-object-box .phui-object-item-list-view .phui-object-item-frame { 650 608 border: none; 651 609 border-bottom: 1px solid {$thinblueborder}; 652 610 } 653 611 654 - .dashboard-panel .phui-object-item-list-header, 655 - .dashboard-panel .maniphest-task-group-header { 612 + .dashboard-pane .phui-object-item-list-header { 656 613 font-size: 13px; 657 614 color: {$bluetext}; 658 615 background: {$lightgreybackground}; 616 + border-top: 1px solid {$thinblueborder}; 659 617 border-bottom: 1px solid {$thinblueborder}; 660 618 padding: 8px 12px; 661 - -webkit-font-smoothing: antialiased; 619 + font-weight: 500; 662 620 } 663 621 664 - .dashboard-panel .phui-object-item-empty .phui-info-view { 622 + .dashboard-pane .phui-header-shell + .phui-object-item-list-view 623 + .phui-object-item-list-header { 624 + border-top: none; 625 + } 626 + 627 + .dashboard-pane .phui-object-item-empty .phui-info-view { 665 628 border: none; 666 - border-bottom: 1px solid {$thinblueborder}; 667 629 margin: 0; 668 630 } 669 631 670 632 .device-desktop .aphront-multi-column-fluid .aphront-multi-column-2-up 671 633 .aphront-multi-column-column-outer.third .phui-object-item-col2 { 672 634 display: none; 673 - } 674 - 675 - .dashboard-panel .phui-object-box .phui-header-shell { 676 - display: none; 677 - } 678 - 679 - .dashboard-panel .phui-object-box { 680 - margin: 0; 681 635 } 682 636 683 637 ··· 741 695 .device-desktop .phui-object-item-launcher-list .phui-object-icon-pane { 742 696 width: auto; 743 697 } 698 + 699 + .phui-object-item-image { 700 + width: 40px; 701 + height: 40px; 702 + background-size: 100%; 703 + margin: 6px; 704 + position: absolute; 705 + } 706 + 707 + .phui-object-item-with-image .phui-object-item-frame { 708 + min-height: 52px; 709 + } 710 + 711 + .phui-object-item-with-image .phui-object-item-content-box { 712 + margin-left: 46px; 713 + }