@zohodesk/library-platform 1.2.0-exp.4 → 1.2.0-exp.45
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/es/.DS_Store +0 -0
- package/es/bc/sort-by/SortOrderEnum.js +8 -0
- package/es/cc/date/Properties.js +0 -15
- package/es/cc/fields/field/Properties.js +1 -8
- package/es/cc/flex-container/Properties.js +79 -0
- package/es/cc/flex-container/Types.js +39 -0
- package/es/cc/flex-container/index.js +2 -0
- package/es/cc/form/Properties.js +0 -8
- package/es/cc/label/Properties.js +5 -12
- package/es/cc/multi-select/Properties.js +1 -8
- package/es/cc/section/Properties.js +1 -8
- package/es/cc/select/Properties.js +1 -8
- package/es/cc/tags/model/TagModel.js +26 -0
- package/es/cc/textarea/Properties.js +0 -15
- package/es/cc/textbox/Properties.js +1 -8
- package/es/flex-layout/.DS_Store +0 -0
- package/es/index.js +6 -4
- package/es/library/behaviours/sort-by/adapters/controllers/SortBy.js +28 -0
- package/es/library/behaviours/sort-by/applications/usecases/SortBy.js +28 -0
- package/es/library/behaviours/sort-by/frameworks/ui/DemoBehaviour.js +20 -0
- package/es/library/custom-component/domain/entities/SlotValidator.js +84 -0
- package/es/library/custom-component/frameworks/ui/CustomComponentFactory.js +56 -0
- package/es/library/dot/components/form/adapters/presenter/TransformState.js +1 -3
- package/es/library/dot/components/form/frameworks/ui/FormView.js +3 -6
- package/es/library/dot/components/form/frameworks/ui/sub-components/Footer.js +6 -16
- package/es/library/dot/components/form/frameworks/ui/sub-components/Header.js +6 -16
- package/es/library/dot/components/form/frameworks/ui/sub-components/Sections.js +2 -4
- package/es/library/dot/components/form-fields/checkbox/frameworks/ui/CheckboxView.js +3 -6
- package/es/library/dot/components/form-fields/currency/frameworks/ui/CurrencyView.js +3 -6
- package/es/library/dot/components/form-fields/date/frameworks/ui/DateView.js +3 -6
- package/es/library/dot/components/form-fields/datetime/frameworks/ui/DateTimeView.js +3 -6
- package/es/library/dot/components/form-fields/decimal/frameworks/ui/DecimalView.js +3 -6
- package/es/library/dot/components/form-fields/email/frameworks/ui/EmailView.js +3 -6
- package/es/library/dot/components/form-fields/field/FieldItem.js +2 -4
- package/es/library/dot/components/form-fields/lookup/frameworks/ui/LookupView.js +3 -6
- package/es/library/dot/components/form-fields/multi-select/frameworks/ui/MultiSelectView.js +4 -7
- package/es/library/dot/components/form-fields/number/frameworks/ui/NumberView.js +3 -6
- package/es/library/dot/components/form-fields/percentage/frameworks/ui/PercentageView.js +4 -7
- package/es/library/dot/components/form-fields/phone/frameworks/ui/PhoneView.js +3 -6
- package/es/library/dot/components/form-fields/pick-list/frameworks/ui/PickListView.js +4 -7
- package/es/library/dot/components/form-fields/textarea/frameworks/ui/TextAreaView.js +3 -6
- package/es/library/dot/components/form-fields/textbox/frameworks/ui/TextBoxView.js +3 -6
- package/es/library/dot/components/form-fields/url/frameworks/ui/UrlView.js +3 -6
- package/es/library/dot/components/part-wrapper/POC_DOCUMENT.md +648 -0
- package/es/library/dot/components/part-wrapper/domain/entities/interfaces/Properties.js +52 -0
- package/es/library/dot/components/part-wrapper/frameworks/ui/PartWrapper.js +24 -0
- package/es/library/dot/components/part-wrapper/frameworks/ui/PartWrapperFactory.js +27 -0
- package/es/library/dot/components/part-wrapper/frameworks/ui/PartWrapperView.js +45 -0
- package/es/library/dot/components/part-wrapper/frameworks/ui/css/PartWrapper.module.css +16 -0
- package/es/library/dot/components/part-wrapper/poc/index.js +9 -0
- package/es/library/dot/components/part-wrapper/poc/layouts/POCFormLayout.js +130 -0
- package/es/library/dot/components/part-wrapper/poc/layouts/POCMixedLayout.js +128 -0
- package/es/library/dot/components/part-wrapper/poc/layouts/POCTableCellLayout.js +105 -0
- package/es/library/dot/components/part-wrapper/poc/layouts/css/poc-form-layout.module.css +46 -0
- package/es/library/dot/components/part-wrapper/poc/layouts/css/poc-mixed-layout.module.css +89 -0
- package/es/library/dot/components/part-wrapper/poc/layouts/css/poc-table-cell-layout.module.css +70 -0
- package/es/library/dot/components/section/frameworks/ui/RenderField.js +1 -3
- package/es/library/dot/components/section/frameworks/ui/SectionView.js +8 -14
- package/es/library/dot/components/table-list/adapters/controllers/SortByController.js +25 -0
- package/es/library/dot/components/table-list/adapters/controllers/SortedController.js +18 -0
- package/es/library/dot/components/table-list/frameworks/ui/TableListView.js +4 -8
- package/es/library/dot/components/table-list/frameworks/ui/handlers/HandleSortClick.js +12 -0
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/Header.js +4 -6
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/HeaderData.js +5 -11
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/header/MassAction.js +5 -11
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/row/Row.js +4 -8
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/row/RowActions.js +5 -12
- package/es/library/dot/components/table-list/frameworks/ui/sub-components/row/RowData.js +4 -12
- package/es/library/dot/legacy-to-new-arch/date/frameworks/ui/DateView.js +4 -10
- package/es/library/dot/legacy-to-new-arch/flex-container/frameworks/ui/FlexContainer.js +11 -0
- package/es/library/dot/legacy-to-new-arch/flex-container/frameworks/ui/FlexContainerView.js +37 -0
- package/es/library/dot/legacy-to-new-arch/label/frameworks/ui/LabelView.js +5 -11
- package/es/library/dot/legacy-to-new-arch/multi-select/frameworks/ui/MultiSelectView.js +8 -21
- package/es/library/dot/legacy-to-new-arch/select/frameworks/ui/SelectView.js +8 -18
- package/es/library/dot/legacy-to-new-arch/text-area/frameworks/ui/TextAreaView.js +4 -10
- package/es/library/dot/legacy-to-new-arch/textbox/frameworks/ui/TextBoxView.js +4 -10
- package/es/library/poc-slot-usage/employee-card/adapters/presenters/EmployeeCardStateMapper.js +14 -0
- package/es/library/poc-slot-usage/employee-card/applications/usecases/BuildEmployeeCardUseCase.js +25 -0
- package/es/library/poc-slot-usage/employee-card/domain/entities/EmployeeCardSlots.js +68 -0
- package/es/library/poc-slot-usage/employee-card/frameworks/ui/EmployeeCard.js +13 -0
- package/es/library/poc-slot-usage/employee-card/frameworks/ui/EmployeeCardView.js +42 -0
- package/es/library/poc-slot-usage/flex-container/adapters/presenters/FlexContainerStateMapper.js +8 -0
- package/es/library/poc-slot-usage/flex-container/applications/usecases/BuildFlexContainerUseCase.js +44 -0
- package/es/library/poc-slot-usage/flex-container/domain/entities/FlexContainerSlots.js +18 -0
- package/es/library/poc-slot-usage/flex-container/frameworks/ui/FlexContainer.js +5 -0
- package/es/library/poc-slot-usage/flex-container/frameworks/ui/FlexContainerView.js +40 -0
- package/es/library/poc-slot-usage/index.js +7 -0
- package/es/library/poc-slot-usage/mismatched-card/applications/usecases/BuildMismatchedCardUseCase.js +23 -0
- package/es/library/poc-slot-usage/mismatched-card/domain/entities/MismatchedCardSlots.js +39 -0
- package/es/library/poc-slot-usage/mismatched-card/frameworks/ui/MismatchedCard.js +9 -0
- package/es/library/poc-slot-usage/mismatched-card/frameworks/ui/MismatchedCardView.js +39 -0
- package/es/library/poc-slot-usage/product-action/applications/usecases/BuildProductActionUseCase.js +21 -0
- package/es/library/poc-slot-usage/product-action/frameworks/ui/ProductAction.js +5 -0
- package/es/library/poc-slot-usage/product-action/frameworks/ui/ProductActionView.js +24 -0
- package/es/library/poc-slot-usage/product-body/applications/usecases/BuildProductBodyUseCase.js +21 -0
- package/es/library/poc-slot-usage/product-body/frameworks/ui/ProductBody.js +5 -0
- package/es/library/poc-slot-usage/product-body/frameworks/ui/ProductBodyView.js +20 -0
- package/es/library/poc-slot-usage/product-card/adapters/presenters/ProductCardStateMapper.js +8 -0
- package/es/library/poc-slot-usage/product-card/applications/usecases/BuildProductCardUseCase.js +34 -0
- package/es/library/poc-slot-usage/product-card/domain/entities/ProductCardSlots.js +70 -0
- package/es/library/poc-slot-usage/product-card/frameworks/ui/ProductCard.js +5 -0
- package/es/library/poc-slot-usage/product-card/frameworks/ui/ProductCardView.js +40 -0
- package/es/library/poc-slot-usage/product-title/applications/usecases/BuildProductTitleUseCase.js +21 -0
- package/es/library/poc-slot-usage/product-title/frameworks/ui/ProductTitle.js +5 -0
- package/es/library/poc-slot-usage/product-title/frameworks/ui/ProductTitleView.js +20 -0
- package/es/platform/client-actions/cc/action-event-mediator/Properties.js +43 -0
- package/es/platform/client-actions/components/action-event-mediator/frameworks/ui/ClientActionsAdapter.js +2 -1
- package/es/platform/client-scripts/cc/zclient-scripts-execution/clientScriptsSchema.js +1 -4
- package/es/platform/components/form-connected/frameworks/FormConnectedView.js +0 -2
- package/es/platform/components/smart-action-band/adapters/presenters/ActionBandTranslator.js +10 -7
- package/es/platform/components/smart-action-band/frameworks/SmartActionBandView.js +5 -18
- package/es/platform/components/table-connected/adapters/controllers/ColumnChooserOpenedController.js +28 -0
- package/es/platform/components/table-connected/adapters/controllers/ColumnChooserUpdateController.js +31 -0
- package/es/platform/zform/adapters/presenter/FormTranslator.js +12 -8
- package/es/platform/zform/adapters/presenter/translators/SectionTranslator.js +14 -10
- package/es/platform/zform/adapters/presenter/translators/fields/BooleanFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/CurrencyFieldTranslator.js +1 -2
- package/es/platform/zform/adapters/presenter/translators/fields/DateFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/DateTimeFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/DecimalFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/EmailFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/LookUpFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/MultiselectFieldTranslator.js +8 -13
- package/es/platform/zform/adapters/presenter/translators/fields/NumberFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/PercentageFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/PhoneFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/PicklistFieldTranslator.js +12 -11
- package/es/platform/zform/adapters/presenter/translators/fields/TextAreaFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/TextFieldTranslator.js +2 -4
- package/es/platform/zform/adapters/presenter/translators/fields/URLFieldTranslator.js +2 -4
- package/es/platform/zlist/adapters/gateways/SortBy.js +38 -0
- package/es/platform/zlist/adapters/presenters/SelectionTranslator.js +4 -2
- package/es/platform/zlist/adapters/presenters/TableTranslator.js +1 -6
- package/es/platform/zlist/adapters/presenters/translators/ColumnTranslator.js +1 -7
- package/es/platform/zlist/adapters/presenters/translators/Header.js +6 -7
- package/es/platform/zlist/adapters/presenters/translators/Row.js +5 -6
- package/es/platform/zlist/adapters/presenters/translators/fields/DateFieldTranslator.js +3 -7
- package/es/platform/zlist/adapters/presenters/translators/fields/DateTimeFieldTranslator.js +3 -7
- package/es/platform/zlist/domain/entities/SortBy.js +58 -0
- package/es/platform/zlist/domain/entities/interfaces/ISortBy.js +1 -0
- package/es/to-do-app/ToDo.js +10 -0
- package/es/to-do-app/cc/button/Constants.js +0 -0
- package/es/to-do-app/cc/button/Events.js +0 -0
- package/es/to-do-app/cc/button/Properties.js +4 -0
- package/es/to-do-app/cc/button/index.js +0 -0
- package/es/to-do-app/cc/textbox/Constants.js +7 -0
- package/es/to-do-app/cc/textbox/Events.js +20 -0
- package/es/to-do-app/cc/textbox/Properties.js +51 -0
- package/es/to-do-app/cc/textbox/index.js +3 -0
- package/es/to-do-app/component/textbox/framework/TextBox.js +30 -0
- package/es/to-do-app/component/textbox/framework/TextBoxView.js +42 -0
- package/package.json +2 -2
- package/es/platform/client-actions/behaviour/zclient-actions/adapters/resources/__test__/ClientActionsFetchSDK.test.js +0 -183
- package/es/platform/client-actions/cc/client-actions-renderer/Properties.js +0 -58
- package/es/platform/client-actions/cc/client-actions-renderer/ViewMetaSchema.js +0 -17
- package/es/platform/client-actions/components/client-actions-renderer/adapters/presenters/ClientActionsRendererTranslator.js +0 -24
- package/es/platform/client-actions/components/client-actions-renderer/domain/entities/State.js +0 -8
- package/es/platform/client-actions/components/client-actions-renderer/frameworks/ui/client-actions-renderer/ClientActionsRenderer.js +0 -11
- package/es/platform/client-actions/components/client-actions-renderer/frameworks/ui/client-actions-renderer/ClientActionsRenderer.module.css +0 -23
- package/es/platform/client-actions/components/client-actions-renderer/frameworks/ui/client-actions-renderer/ClientActionsRendererView.js +0 -25
- package/es/platform/client-actions/components/client-actions-renderer/frameworks/ui/client-actions-renderer/views/DefaultActionsRendererView.js +0 -66
- package/es/platform/client-actions/components/client-actions-renderer/frameworks/ui/more-actions-renderer/MoreActionsRenderer.js +0 -9
- package/es/platform/client-actions/components/client-actions-renderer/frameworks/ui/more-actions-renderer/MoreActionsRendererView.js +0 -81
- package/es/platform/client-scripts/behaviour/zclient-scripts-fetch/adapters/resources/__test__/ClientScriptsFetchSDK.test.js +0 -163
- /package/es/{platform/client-actions/components/client-actions-renderer/domain/entities/ClientActionsRendererDatatype.js → library/behaviours/sort-by/applications/interfaces/output/SortByOutputModel.js} +0 -0
- /package/es/{platform/client-actions/components/client-actions-renderer/domain/entities/ClientActionsRendererViewProps.js → library/dot/components/part-wrapper/applications/interfaces/State.js} +0 -0
- /package/es/platform/{client-actions/components/client-actions-renderer/domain/entities/Context.js → zlist/applications/interfaces/gateways/ISortBy.js} +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PartWrapper Domain Properties
|
|
3
|
+
*
|
|
4
|
+
* Defines the contract for the PartWrapper component's input properties.
|
|
5
|
+
* Aligned with ADR UI-STYLE-003: Styling hooks (part="...") at ACA-controlled wrapper boundaries.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* CC-style property schema for createCustomComponent.
|
|
10
|
+
*
|
|
11
|
+
* Follows the same format as @cc/button/Properties, @cc/text/Properties etc.
|
|
12
|
+
* `content` is typed as 'object' because React elements are objects.
|
|
13
|
+
* This allows createCustomComponent to pass it through to state.properties
|
|
14
|
+
* without stripping it (unlike `children` which is explicitly discarded).
|
|
15
|
+
*/
|
|
16
|
+
const PartWrapperPropertiesSchema = {
|
|
17
|
+
part: {
|
|
18
|
+
required: true,
|
|
19
|
+
typeMetadata: {
|
|
20
|
+
schema: {
|
|
21
|
+
type: 'string'
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
tagName: {
|
|
26
|
+
required: false,
|
|
27
|
+
defaultValue: 'div',
|
|
28
|
+
typeMetadata: {
|
|
29
|
+
schema: {
|
|
30
|
+
type: 'string'
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
className: {
|
|
35
|
+
required: false,
|
|
36
|
+
defaultValue: '',
|
|
37
|
+
typeMetadata: {
|
|
38
|
+
schema: {
|
|
39
|
+
type: 'string'
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
content: {
|
|
44
|
+
required: false,
|
|
45
|
+
typeMetadata: {
|
|
46
|
+
schema: {
|
|
47
|
+
type: 'object'
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
export default PartWrapperPropertiesSchema;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PartWrapper — ACA Boundary Wrapper Component
|
|
3
|
+
*
|
|
4
|
+
* Entry point for the PartWrapper component.
|
|
5
|
+
* Follows the SmartActionBand.ts → SmartActionBandFactory.create() ACA pattern.
|
|
6
|
+
*
|
|
7
|
+
* PartWrapper is created via createCustomComponent through PartWrapperFactory.
|
|
8
|
+
* It provides `part` attribute support at ACA-controlled wrapper boundaries.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* <PartWrapper part="field-container" content={<TextBox ... />} />
|
|
12
|
+
*
|
|
13
|
+
* NOTE: Inner components are passed via the `content` property (not React children)
|
|
14
|
+
* because createCustomComponent's discardChildren() strips `children` from props
|
|
15
|
+
* and routes them through the slot system. The `content` property is a regular
|
|
16
|
+
* prop that flows through to state.properties.content in the View.
|
|
17
|
+
*
|
|
18
|
+
* ADR: UI-STYLE-003 — Styling Strategy for Legacy Inner Components in Layouts
|
|
19
|
+
*/
|
|
20
|
+
import PartWrapperFactory from "./PartWrapperFactory";
|
|
21
|
+
const PartWrapper = PartWrapperFactory.create({
|
|
22
|
+
name: 'PartWrapper'
|
|
23
|
+
});
|
|
24
|
+
export default PartWrapper;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PartWrapperFactory
|
|
3
|
+
*
|
|
4
|
+
* Factory class following the SmartActionBandFactory ACA pattern.
|
|
5
|
+
* Creates PartWrapper instances via createCustomComponent.
|
|
6
|
+
*
|
|
7
|
+
* Unlike SmartActionBandFactory, PartWrapper has no behaviours, SDK, or data sources
|
|
8
|
+
* since it is a pure styling boundary wrapper (ADR UI-STYLE-003).
|
|
9
|
+
*/
|
|
10
|
+
import { createCustomComponent } from "../../../../../custom-component";
|
|
11
|
+
import PartWrapperPropertiesSchema from "../../domain/entities/interfaces/Properties";
|
|
12
|
+
import PartWrapperView from "./PartWrapperView";
|
|
13
|
+
export default class PartWrapperFactory {
|
|
14
|
+
static create() {
|
|
15
|
+
let {
|
|
16
|
+
name = 'PartWrapper',
|
|
17
|
+
View = PartWrapperView
|
|
18
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
19
|
+
return createCustomComponent({
|
|
20
|
+
name: name,
|
|
21
|
+
View: View,
|
|
22
|
+
properties: PartWrapperPropertiesSchema,
|
|
23
|
+
eventHandlers: {}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PartWrapperView
|
|
3
|
+
*
|
|
4
|
+
* Pure rendering function for the PartWrapper component.
|
|
5
|
+
* Renders a thin HTML wrapper element with `part` and `data-part` attributes,
|
|
6
|
+
* providing a stable styling boundary per ADR UI-STYLE-003.
|
|
7
|
+
*
|
|
8
|
+
* Follows the ACA View signature: function View({ state, helpers }, ref)
|
|
9
|
+
* - Receives properties via `state.properties` (managed by createCustomComponent)
|
|
10
|
+
* - `content` is passed as a property (not React children) because
|
|
11
|
+
* createCustomComponent strips children via discardChildren() and routes them
|
|
12
|
+
* through the slot system. Using a named `content` property bypasses this.
|
|
13
|
+
*
|
|
14
|
+
* Attributes:
|
|
15
|
+
* - `part`: future Shadow DOM ::part() selector support
|
|
16
|
+
* - `data-part`: Light DOM [data-part="..."] selector support (current)
|
|
17
|
+
* - `display: contents`: makes the wrapper layout-transparent
|
|
18
|
+
*
|
|
19
|
+
* This View does NOT modify or touch any inner component — it only wraps at the boundary.
|
|
20
|
+
*/
|
|
21
|
+
import React from 'react'; // @ts-ignore
|
|
22
|
+
|
|
23
|
+
import style from "./css/PartWrapper.module.css";
|
|
24
|
+
|
|
25
|
+
function PartWrapperView(_ref, ref) {
|
|
26
|
+
let {
|
|
27
|
+
state
|
|
28
|
+
} = _ref;
|
|
29
|
+
const {
|
|
30
|
+
part,
|
|
31
|
+
tagName = 'div',
|
|
32
|
+
className,
|
|
33
|
+
content
|
|
34
|
+
} = state.properties;
|
|
35
|
+
const Element = tagName;
|
|
36
|
+
const combinedClassName = className ? `${style.partWrapper} ${className}` : style.partWrapper;
|
|
37
|
+
return /*#__PURE__*/React.createElement(Element, {
|
|
38
|
+
ref: ref,
|
|
39
|
+
part: part,
|
|
40
|
+
"data-part": part,
|
|
41
|
+
className: combinedClassName
|
|
42
|
+
}, content);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default PartWrapperView;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PartWrapper.module.css
|
|
3
|
+
*
|
|
4
|
+
* Default styling for the PartWrapper boundary element.
|
|
5
|
+
* `display: contents` ensures the wrapper is layout-transparent:
|
|
6
|
+
* - It does NOT create a new box in the layout flow
|
|
7
|
+
* - Children render as if the wrapper doesn't exist visually
|
|
8
|
+
* - Spacing, flexbox, grid contexts of the parent are preserved
|
|
9
|
+
*
|
|
10
|
+
* This allows PartWrapper to be inserted around any component
|
|
11
|
+
* without affecting existing layout behaviour.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
.partWrapper {
|
|
15
|
+
display: contents;
|
|
16
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POC Layout Exports
|
|
3
|
+
*
|
|
4
|
+
* Demonstration layouts showing PartWrapper usage across different
|
|
5
|
+
* component categories as per ADR UI-STYLE-003.
|
|
6
|
+
*/
|
|
7
|
+
export { default as POCFormLayout } from "./layouts/POCFormLayout";
|
|
8
|
+
export { default as POCTableCellLayout } from "./layouts/POCTableCellLayout";
|
|
9
|
+
export { default as POCMixedLayout } from "./layouts/POCMixedLayout";
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POC: Form Layout with PartWrapper
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates wrapping Category B components (custom component root — FieldItem)
|
|
5
|
+
* with PartWrapper to provide styling boundaries.
|
|
6
|
+
*
|
|
7
|
+
* Components used:
|
|
8
|
+
* - TextBox (root: FieldItem → <div>) — from components/form-fields/textbox
|
|
9
|
+
* - Email (root: FieldItem → <div>) — from components/form-fields/email
|
|
10
|
+
* - PickList (root: FieldItem → <div>) — from components/form-fields/pick-list
|
|
11
|
+
*
|
|
12
|
+
* These are ACA components created via createCustomComponent.
|
|
13
|
+
* PartWrapper wraps them WITHOUT any modification to their internals.
|
|
14
|
+
*
|
|
15
|
+
* CSS overrides target [data-part="..."] selectors at the wrapper boundary.
|
|
16
|
+
*/
|
|
17
|
+
import React from 'react';
|
|
18
|
+
import PartWrapper from "../../frameworks/ui/PartWrapper";
|
|
19
|
+
import TextBox from "../../../form-fields/textbox/frameworks/ui/TextBox";
|
|
20
|
+
import Email from "../../../form-fields/email/frameworks/ui/Email";
|
|
21
|
+
import PickList from "../../../form-fields/pick-list/frameworks/ui/PickList"; // @ts-ignore
|
|
22
|
+
|
|
23
|
+
import style from "./css/poc-form-layout.module.css";
|
|
24
|
+
/**
|
|
25
|
+
* POCFormLayout — Example ACA Layout View
|
|
26
|
+
*
|
|
27
|
+
* Shows how a layout component can use PartWrapper to expose
|
|
28
|
+
* styling boundaries around form field components.
|
|
29
|
+
*
|
|
30
|
+
* Usage pattern (content as property — required by createCustomComponent):
|
|
31
|
+
* <PartWrapper part="field-container" content={<TextBox ...props />} />
|
|
32
|
+
*
|
|
33
|
+
* CSS targeting:
|
|
34
|
+
* [data-part="field-container"] { padding: 12px; }
|
|
35
|
+
* [data-part="field-container"]:hover { background: var(--field-hover-bg); }
|
|
36
|
+
*
|
|
37
|
+
* Future Shadow DOM migration:
|
|
38
|
+
* my-form::part(field-container) { padding: 12px; }
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
function POCFormLayout(_ref, ref) {
|
|
42
|
+
let {
|
|
43
|
+
state
|
|
44
|
+
} = _ref;
|
|
45
|
+
const {
|
|
46
|
+
id,
|
|
47
|
+
label,
|
|
48
|
+
value,
|
|
49
|
+
email,
|
|
50
|
+
placeholder,
|
|
51
|
+
errorMessage,
|
|
52
|
+
disabled,
|
|
53
|
+
readonly,
|
|
54
|
+
required,
|
|
55
|
+
uiConfig,
|
|
56
|
+
labelActions,
|
|
57
|
+
actions,
|
|
58
|
+
clientScripts,
|
|
59
|
+
pickListOptions
|
|
60
|
+
} = state?.properties || {};
|
|
61
|
+
const {
|
|
62
|
+
size,
|
|
63
|
+
breakRow
|
|
64
|
+
} = uiConfig || {};
|
|
65
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
66
|
+
ref: ref,
|
|
67
|
+
"data-part": "form-layout",
|
|
68
|
+
className: style.formLayout
|
|
69
|
+
}, /*#__PURE__*/React.createElement(PartWrapper, {
|
|
70
|
+
part: "field-container",
|
|
71
|
+
content: /*#__PURE__*/React.createElement(TextBox, {
|
|
72
|
+
id: `${id}_name`,
|
|
73
|
+
label: label || 'Name',
|
|
74
|
+
value: value || '',
|
|
75
|
+
placeholder: placeholder || 'Enter name',
|
|
76
|
+
errorMessage: errorMessage,
|
|
77
|
+
disabled: disabled,
|
|
78
|
+
readonly: readonly,
|
|
79
|
+
required: required,
|
|
80
|
+
uiConfig: {
|
|
81
|
+
size,
|
|
82
|
+
breakRow
|
|
83
|
+
},
|
|
84
|
+
labelActions: labelActions || [],
|
|
85
|
+
actions: actions || [],
|
|
86
|
+
clientScripts: clientScripts,
|
|
87
|
+
name: "TextBox"
|
|
88
|
+
})
|
|
89
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
90
|
+
part: "field-container",
|
|
91
|
+
content: /*#__PURE__*/React.createElement(Email, {
|
|
92
|
+
id: `${id}_email`,
|
|
93
|
+
label: "Email Address",
|
|
94
|
+
value: email || '',
|
|
95
|
+
placeholder: "Enter email",
|
|
96
|
+
disabled: disabled,
|
|
97
|
+
readonly: readonly,
|
|
98
|
+
required: required,
|
|
99
|
+
uiConfig: {
|
|
100
|
+
size,
|
|
101
|
+
breakRow
|
|
102
|
+
},
|
|
103
|
+
labelActions: labelActions || [],
|
|
104
|
+
actions: actions || [],
|
|
105
|
+
clientScripts: clientScripts,
|
|
106
|
+
name: "Email"
|
|
107
|
+
})
|
|
108
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
109
|
+
part: "field-container",
|
|
110
|
+
content: /*#__PURE__*/React.createElement(PickList, {
|
|
111
|
+
id: `${id}_status`,
|
|
112
|
+
label: "Status",
|
|
113
|
+
value: "",
|
|
114
|
+
options: pickListOptions || [],
|
|
115
|
+
disabled: disabled,
|
|
116
|
+
readonly: readonly,
|
|
117
|
+
required: false,
|
|
118
|
+
uiConfig: {
|
|
119
|
+
size,
|
|
120
|
+
breakRow
|
|
121
|
+
},
|
|
122
|
+
labelActions: labelActions || [],
|
|
123
|
+
actions: actions || [],
|
|
124
|
+
clientScripts: clientScripts,
|
|
125
|
+
name: "PickList"
|
|
126
|
+
})
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export default POCFormLayout;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POC: Mixed Layout with PartWrapper
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates wrapping BOTH root element categories:
|
|
5
|
+
*
|
|
6
|
+
* Category A — HTML root elements:
|
|
7
|
+
* - ErrorState (root: <div>) — legacy-to-new-arch
|
|
8
|
+
* - Breadcrumb (root: <div>) — legacy-to-new-arch
|
|
9
|
+
* - CommonEmptyState (root: <span>) — legacy-to-new-arch
|
|
10
|
+
*
|
|
11
|
+
* Category B — Custom component root elements:
|
|
12
|
+
* - Button (root: <Button> component) — legacy-to-new-arch
|
|
13
|
+
* - ActionIcon (root: <ActionIcon> component) — legacy-to-new-arch
|
|
14
|
+
* - Text (root: <Typography> component) — legacy-to-new-arch
|
|
15
|
+
*
|
|
16
|
+
* This proves that PartWrapper handles both categories uniformly
|
|
17
|
+
* because it wraps at the BOUNDARY — it doesn't care about the inner root.
|
|
18
|
+
*
|
|
19
|
+
* ADR UI-STYLE-003 Point 4: "Wrapper exposes styling surface"
|
|
20
|
+
*/
|
|
21
|
+
import React from 'react';
|
|
22
|
+
import PartWrapper from "../../frameworks/ui/PartWrapper";
|
|
23
|
+
import Button from "../../../../legacy-to-new-arch/button/frameworks/ui/Button";
|
|
24
|
+
import ActionIcon from "../../../../legacy-to-new-arch/action-icon/frameworks/ui/ActionIcon";
|
|
25
|
+
import Text from "../../../../legacy-to-new-arch/text/frameworks/ui/Text"; // @ts-ignore
|
|
26
|
+
|
|
27
|
+
import style from "./css/poc-mixed-layout.module.css";
|
|
28
|
+
/**
|
|
29
|
+
* POCMixedLayout — Example ACA Layout View
|
|
30
|
+
*
|
|
31
|
+
* Shows how a page layout can use PartWrapper to expose consistent
|
|
32
|
+
* styling boundaries regardless of inner component root type.
|
|
33
|
+
*
|
|
34
|
+
* Key demonstration:
|
|
35
|
+
* - Category A (HTML root: div, span) — wrapped identically
|
|
36
|
+
* - Category B (Custom root: Button, Typography) — wrapped identically
|
|
37
|
+
* - PartWrapper is agnostic to inner component implementation
|
|
38
|
+
*
|
|
39
|
+
* Usage pattern (content as property — required by createCustomComponent):
|
|
40
|
+
* <PartWrapper part="page-header" content={<div>...</div>} />
|
|
41
|
+
*
|
|
42
|
+
* CSS targeting:
|
|
43
|
+
* [data-part="page-header"] { background: var(--header-bg); }
|
|
44
|
+
* [data-part="action-bar"] { display: flex; gap: 8px; }
|
|
45
|
+
* [data-part="content-area"] { flex: 1; }
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
function POCMixedLayout(_ref, ref) {
|
|
49
|
+
let {
|
|
50
|
+
state
|
|
51
|
+
} = _ref;
|
|
52
|
+
const {
|
|
53
|
+
pageTitle,
|
|
54
|
+
pageDescription,
|
|
55
|
+
primaryButtonText,
|
|
56
|
+
secondaryButtonText,
|
|
57
|
+
contentText,
|
|
58
|
+
iconName,
|
|
59
|
+
iconTooltip
|
|
60
|
+
} = state?.properties || {};
|
|
61
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
62
|
+
ref: ref,
|
|
63
|
+
"data-part": "page-layout",
|
|
64
|
+
className: style.pageLayout
|
|
65
|
+
}, /*#__PURE__*/React.createElement(PartWrapper, {
|
|
66
|
+
part: "page-header",
|
|
67
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
68
|
+
className: style.headerContent
|
|
69
|
+
}, /*#__PURE__*/React.createElement(PartWrapper, {
|
|
70
|
+
part: "page-title",
|
|
71
|
+
content: /*#__PURE__*/React.createElement(Text, {
|
|
72
|
+
text: pageTitle || 'Page Title',
|
|
73
|
+
size: "24",
|
|
74
|
+
weight: "bold"
|
|
75
|
+
})
|
|
76
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
77
|
+
part: "page-description",
|
|
78
|
+
content: /*#__PURE__*/React.createElement(Text, {
|
|
79
|
+
text: pageDescription || 'Page description text goes here',
|
|
80
|
+
size: "14",
|
|
81
|
+
weight: "regular"
|
|
82
|
+
})
|
|
83
|
+
}))
|
|
84
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
85
|
+
part: "action-bar",
|
|
86
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
87
|
+
className: style.actionBarContent
|
|
88
|
+
}, /*#__PURE__*/React.createElement(PartWrapper, {
|
|
89
|
+
part: "primary-action",
|
|
90
|
+
content: /*#__PURE__*/React.createElement(Button, {
|
|
91
|
+
text: primaryButtonText || 'Create',
|
|
92
|
+
palette: "primaryFilled",
|
|
93
|
+
size: "medium"
|
|
94
|
+
})
|
|
95
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
96
|
+
part: "secondary-action",
|
|
97
|
+
content: /*#__PURE__*/React.createElement(Button, {
|
|
98
|
+
text: secondaryButtonText || 'Export',
|
|
99
|
+
palette: "secondary",
|
|
100
|
+
size: "medium"
|
|
101
|
+
})
|
|
102
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
103
|
+
part: "icon-action",
|
|
104
|
+
content: /*#__PURE__*/React.createElement(ActionIcon, {
|
|
105
|
+
name: iconName || 'filter',
|
|
106
|
+
tooltip: iconTooltip || 'Filter'
|
|
107
|
+
})
|
|
108
|
+
}))
|
|
109
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
110
|
+
part: "content-area",
|
|
111
|
+
content: /*#__PURE__*/React.createElement(Text, {
|
|
112
|
+
text: contentText || 'Content area — displays data from inner components',
|
|
113
|
+
size: "14"
|
|
114
|
+
})
|
|
115
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
116
|
+
part: "page-footer",
|
|
117
|
+
tagName: "footer",
|
|
118
|
+
content: /*#__PURE__*/React.createElement("div", {
|
|
119
|
+
className: style.footerContent
|
|
120
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
121
|
+
text: "Footer content",
|
|
122
|
+
size: "12",
|
|
123
|
+
weight: "regular"
|
|
124
|
+
}))
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export default POCMixedLayout;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POC: Table Cell Layout with PartWrapper
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates wrapping Category B components (custom component root)
|
|
5
|
+
* used in table cells, with PartWrapper to provide styling boundaries.
|
|
6
|
+
*
|
|
7
|
+
* Components used (from legacy-to-new-arch):
|
|
8
|
+
* - Text (root: Typography — custom component)
|
|
9
|
+
* - Tags (root: TagList — custom component)
|
|
10
|
+
* - Switch (root: Switch — custom component)
|
|
11
|
+
* - Link (root: TableLink — custom component)
|
|
12
|
+
* - Email (root: TableEmail — custom component)
|
|
13
|
+
*
|
|
14
|
+
* All are legacy-to-new-arch ACA components created via createCustomComponent.
|
|
15
|
+
* PartWrapper wraps them WITHOUT any modification to their internals.
|
|
16
|
+
*
|
|
17
|
+
* Each cell type gets a unique part name for granular CSS targeting.
|
|
18
|
+
*/
|
|
19
|
+
import React from 'react';
|
|
20
|
+
import PartWrapper from "../../frameworks/ui/PartWrapper";
|
|
21
|
+
import Text from "../../../../legacy-to-new-arch/text/frameworks/ui/Text";
|
|
22
|
+
import Tags from "../../../../legacy-to-new-arch/tags/frameworks/ui/Tags";
|
|
23
|
+
import Switch from "../../../../legacy-to-new-arch/switch/frameworks/ui/Switch";
|
|
24
|
+
import Link from "../../../../legacy-to-new-arch/link/frameworks/ui/Link";
|
|
25
|
+
import Email from "../../../../legacy-to-new-arch/email/frameworks/ui/Email"; // @ts-ignore
|
|
26
|
+
|
|
27
|
+
import style from "./css/poc-table-cell-layout.module.css";
|
|
28
|
+
/**
|
|
29
|
+
* POCTableCellLayout — Example ACA Layout View
|
|
30
|
+
*
|
|
31
|
+
* Shows how a table row layout can use PartWrapper to expose
|
|
32
|
+
* per-cell-type styling boundaries around table field components.
|
|
33
|
+
*
|
|
34
|
+
* Usage pattern (content as property — required by createCustomComponent):
|
|
35
|
+
* <PartWrapper part="cell-text" content={<Text text={value} />} />
|
|
36
|
+
*
|
|
37
|
+
* CSS targeting:
|
|
38
|
+
* [data-part="cell-text"] { text-align: left; }
|
|
39
|
+
* [data-part="cell-tags"] { max-width: 200px; }
|
|
40
|
+
* [data-part="cell-switch"] { justify-content: center; }
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
function POCTableCellLayout(_ref, ref) {
|
|
44
|
+
let {
|
|
45
|
+
state
|
|
46
|
+
} = _ref;
|
|
47
|
+
const {
|
|
48
|
+
textValue,
|
|
49
|
+
tags,
|
|
50
|
+
switchChecked,
|
|
51
|
+
switchDisabled,
|
|
52
|
+
linkText,
|
|
53
|
+
linkHref,
|
|
54
|
+
emailValue,
|
|
55
|
+
textOverflowMode
|
|
56
|
+
} = state?.properties || {};
|
|
57
|
+
const isDotted = textOverflowMode === 'clip';
|
|
58
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
59
|
+
ref: ref,
|
|
60
|
+
"data-part": "table-row",
|
|
61
|
+
className: style.tableRow
|
|
62
|
+
}, /*#__PURE__*/React.createElement(PartWrapper, {
|
|
63
|
+
part: "cell-text",
|
|
64
|
+
content: /*#__PURE__*/React.createElement(Text, {
|
|
65
|
+
text: textValue || 'Sample text',
|
|
66
|
+
tooltip: textValue || 'Sample text',
|
|
67
|
+
isDotted: isDotted
|
|
68
|
+
})
|
|
69
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
70
|
+
part: "cell-tags",
|
|
71
|
+
content: /*#__PURE__*/React.createElement(Tags, {
|
|
72
|
+
tags: tags || [{
|
|
73
|
+
id: '1',
|
|
74
|
+
label: 'Tag A'
|
|
75
|
+
}, {
|
|
76
|
+
id: '2',
|
|
77
|
+
label: 'Tag B'
|
|
78
|
+
}],
|
|
79
|
+
isWrapped: !isDotted
|
|
80
|
+
})
|
|
81
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
82
|
+
part: "cell-switch",
|
|
83
|
+
content: /*#__PURE__*/React.createElement(Switch, {
|
|
84
|
+
checked: switchChecked || false,
|
|
85
|
+
disabled: switchDisabled || false
|
|
86
|
+
})
|
|
87
|
+
}), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
88
|
+
part: "cell-link",
|
|
89
|
+
content: /*#__PURE__*/React.createElement(Link, {
|
|
90
|
+
text: linkText || 'View Details',
|
|
91
|
+
href: linkHref || '#',
|
|
92
|
+
variant: "secondary",
|
|
93
|
+
isDotted: isDotted
|
|
94
|
+
})
|
|
95
|
+
}), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement(PartWrapper, {
|
|
96
|
+
part: "cell-email",
|
|
97
|
+
content: /*#__PURE__*/React.createElement(Email, {
|
|
98
|
+
email: emailValue || 'user@example.com',
|
|
99
|
+
isDotted: isDotted,
|
|
100
|
+
tooltip: emailValue || 'user@example.com'
|
|
101
|
+
})
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export default POCTableCellLayout;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POC: Form Layout — CSS Overrides via [data-part] selectors
|
|
3
|
+
*
|
|
4
|
+
* These styles target the PartWrapper boundaries ONLY.
|
|
5
|
+
* No legacy/inner component CSS is modified.
|
|
6
|
+
*
|
|
7
|
+
* Light DOM (current): [data-part="field-container"] { ... }
|
|
8
|
+
* Shadow DOM (future): my-form::part(field-container) { ... }
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* --- Form Layout Container --- */
|
|
12
|
+
.formLayout {
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
gap: var(--zd_size16) ;
|
|
16
|
+
padding: var(--zd_size24) ;
|
|
17
|
+
background: var(--form-bg, #ffffff);
|
|
18
|
+
border-radius: var(--form-border-radius, 8px);
|
|
19
|
+
box-shadow: var(--form-shadow, 0 1px 3px rgba(0, 0, 0, 0.08));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* --- Field Container: Wrapper Boundary Styling --- */
|
|
23
|
+
/* Targets the PartWrapper <div data-part="field-container"> */
|
|
24
|
+
.formLayout [data-part="field-container"] {
|
|
25
|
+
transition: background-color 0.15s ease;
|
|
26
|
+
padding: var(--zd_size12) var(--zd_size16) ;
|
|
27
|
+
border-bottom: 1px solid var(--field-separator-color, #f0f0f0);
|
|
28
|
+
background-color: red !important;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.formLayout [data-part="field-container"]:last-child {
|
|
32
|
+
border-bottom: 1px solid thick;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Hover: applied at the WRAPPER boundary, not inside the component */
|
|
36
|
+
.formLayout [data-part="field-container"]:hover {
|
|
37
|
+
background-color: var(--field-hover-bg, #f8f9fa);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Focus-within: highlights the field container when any inner element is focused */
|
|
41
|
+
.formLayout [data-part="field-container"]:focus-within {
|
|
42
|
+
outline: 2px solid var(--field-focus-border, #4a90d9);
|
|
43
|
+
outline-offset: -2px;
|
|
44
|
+
background-color: var(--field-focus-bg, #f0f4ff);
|
|
45
|
+
border-radius: 4px;
|
|
46
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POC: Mixed Layout — CSS Overrides via [data-part] selectors
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates styling boundaries for a full page layout
|
|
5
|
+
* with header, action bar, content, and footer sections.
|
|
6
|
+
*
|
|
7
|
+
* ALL styles target [data-part] selectors — zero inner component CSS touched.
|
|
8
|
+
*
|
|
9
|
+
* Light DOM (current): [data-part="page-header"] { ... }
|
|
10
|
+
* Shadow DOM (future): my-page::part(page-header) { ... }
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/* --- Page Layout Container --- */
|
|
14
|
+
.pageLayout {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
height: 100% ;
|
|
18
|
+
background: var(--page-bg, #f5f6f8);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* --- Page Header --- */
|
|
22
|
+
.pageLayout [data-part="page-header"] {
|
|
23
|
+
padding: var(--zd_size24) var(--zd_size32) var(--zd_size16) ;
|
|
24
|
+
background: var(--header-bg, #ffffff);
|
|
25
|
+
border-bottom: 1px solid var(--header-border, #e5e5e5);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.headerContent {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
gap: var(--zd_size4) ;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.pageLayout [data-part="page-title"] {
|
|
35
|
+
display: contents; /* Title boundary — styled via wrapper, Typography component untouched */
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.pageLayout [data-part="page-description"] {
|
|
39
|
+
opacity: 0.7;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* --- Action Bar --- */
|
|
43
|
+
.pageLayout [data-part="action-bar"] {
|
|
44
|
+
padding: var(--zd_size12) var(--zd_size32) ;
|
|
45
|
+
background: var(--action-bar-bg, #ffffff);
|
|
46
|
+
border-bottom: 1px solid var(--action-bar-border, #eeeeee);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.actionBarContent {
|
|
50
|
+
display: flex;
|
|
51
|
+
align-items: center;
|
|
52
|
+
gap: var(--zd_size8) ;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.pageLayout [data-part="primary-action"] {
|
|
56
|
+
display: contents; /* Primary button boundary */
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.pageLayout [data-part="secondary-action"] {
|
|
60
|
+
display: contents; /* Secondary button boundary */
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
[dir=ltr] .pageLayout [data-part="icon-action"] {
|
|
64
|
+
margin-left: auto ;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
[dir=rtl] .pageLayout [data-part="icon-action"] {
|
|
68
|
+
margin-right: auto ;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* --- Content Area --- */
|
|
72
|
+
.pageLayout [data-part="content-area"] {
|
|
73
|
+
flex: 1 ;
|
|
74
|
+
overflow: auto;
|
|
75
|
+
padding: var(--zd_size24) var(--zd_size32) ;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* --- Page Footer --- */
|
|
79
|
+
.pageLayout [data-part="page-footer"] {
|
|
80
|
+
padding: var(--zd_size12) var(--zd_size32) ;
|
|
81
|
+
background: var(--footer-bg, #fafafa);
|
|
82
|
+
border-top: 1px solid var(--footer-border, #e5e5e5);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.footerContent {
|
|
86
|
+
display: flex;
|
|
87
|
+
align-items: center;
|
|
88
|
+
justify-content: space-between;
|
|
89
|
+
}
|