diff --git a/libs/design/src/core/prefix-suffix/prefix-suffix.module.ts b/libs/design/src/core/prefix-suffix/prefix-suffix.module.ts
new file mode 100644
index 0000000000..3c815103a1
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/prefix-suffix.module.ts
@@ -0,0 +1,17 @@
+import { NgModule } from '@angular/core';
+
+import { DaffPrefixDirective } from './prefix.directive';
+import { DaffSuffixDirective } from './suffix.directive';
+
+@NgModule({
+ imports: [],
+ exports: [
+ DaffPrefixDirective,
+ DaffSuffixDirective
+ ],
+ declarations: [
+ DaffPrefixDirective,
+ DaffSuffixDirective
+ ]
+})
+export class DaffPrefixSuffixModule {}
diff --git a/libs/design/src/core/prefix-suffix/prefix.directive.ts b/libs/design/src/core/prefix-suffix/prefix.directive.ts
new file mode 100644
index 0000000000..8719a13079
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/prefix.directive.ts
@@ -0,0 +1,15 @@
+import { Directive, HostBinding } from '@angular/core';
+
+/**
+ *
+ * Prefix can be used to place content before another piece of content in components like
+ * `daff-form-field`, `daff-solo-field`, and `daff-list`.
+ */
+@Directive({
+ selector: '[daffPrefix]'
+})
+
+export class DaffPrefixDirective {
+
+ @HostBinding('class.daff-prefix') class = true;
+}
diff --git a/libs/design/src/core/prefix-suffix/prefixable/prefixable-interface.ts b/libs/design/src/core/prefix-suffix/prefixable/prefixable-interface.ts
new file mode 100644
index 0000000000..ed6e3de858
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/prefixable/prefixable-interface.ts
@@ -0,0 +1,9 @@
+import { DaffPrefixDirective } from '../prefix.directive';
+
+/**
+ * An interface enforcing that a component has the ability to interact with a given DaffPrefixDirective.
+ */
+export interface DaffPrefixable {
+
+ _prefix: DaffPrefixDirective;
+}
diff --git a/libs/design/src/core/prefix-suffix/prefixable/prefixable.spec.ts b/libs/design/src/core/prefix-suffix/prefixable/prefixable.spec.ts
new file mode 100644
index 0000000000..4cb0c77779
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/prefixable/prefixable.spec.ts
@@ -0,0 +1,60 @@
+import { Component } from '@angular/core';
+import { ReactiveFormsModule } from '@angular/forms';
+import { ComponentFixture, async, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+
+import { daffPrefixableMixin } from './prefixable';
+import { DaffPrefixSuffixModule } from '../prefix-suffix.module';
+import { DaffPrefixDirective } from '../prefix.directive';
+
+class PrefixableComponentBase {}
+
+const _prefixableComponentBase = daffPrefixableMixin(PrefixableComponentBase);
+
+@Component({
+ selector: 'daff-prefixable',
+ template: ''
+})
+class PrefixableComponent extends _prefixableComponentBase {}
+
+@Component({
+ template: ''
+})
+class WrapperComponent {}
+
+
+describe('daffPrefixableMixin', () => {
+ let fixture: ComponentFixture;
+ let wrapper: WrapperComponent;
+ let prefixableComponent: PrefixableComponent;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ ReactiveFormsModule,
+ DaffPrefixSuffixModule
+ ],
+ declarations: [
+ WrapperComponent,
+ PrefixableComponent
+ ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(WrapperComponent);
+ wrapper = fixture.componentInstance;
+ fixture.detectChanges();
+
+ prefixableComponent = fixture.debugElement.query(By.css('daff-prefixable')).componentInstance;
+ });
+
+ it('should add a _prefix property to an existing class', () => {
+ expect('_prefix' in prefixableComponent).toBeTruthy();
+ });
+
+ it('should make the _prefix property the daffPrefix directive instance', () => {
+ expect(prefixableComponent._prefix).toEqual(jasmine.any(DaffPrefixDirective));
+ });
+});
diff --git a/libs/design/src/core/prefix-suffix/prefixable/prefixable.ts b/libs/design/src/core/prefix-suffix/prefixable/prefixable.ts
new file mode 100644
index 0000000000..ddd57f463f
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/prefixable/prefixable.ts
@@ -0,0 +1,20 @@
+import { ContentChild } from '@angular/core';
+import { DaffPrefixDirective } from '../prefix.directive';
+import { Constructor } from '../../constructor';
+
+
+/**
+ * A mixin for giving a component the ability to place content before another piece of content.
+ */
+export function daffPrefixableMixin(Base: T) {
+ class Prefixable extends Base {
+
+ @ContentChild(DaffPrefixDirective, { static: true}) _prefix: DaffPrefixDirective;
+
+ constructor(...args: any[]) {
+ super(...args);
+ }
+ }
+
+ return Prefixable;
+}
diff --git a/libs/design/src/core/prefix-suffix/public_api.ts b/libs/design/src/core/prefix-suffix/public_api.ts
new file mode 100644
index 0000000000..12d63b8567
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/public_api.ts
@@ -0,0 +1,7 @@
+export * from './prefix-suffix.module';
+export * from './prefix.directive';
+export * from './suffix.directive';
+export { daffSuffixableMixin } from './suffixable/suffixable';
+export { DaffSuffixable } from './suffixable/suffixable-interface';
+export { DaffPrefixable } from './prefixable/prefixable-interface';
+export { daffPrefixableMixin } from './prefixable/prefixable';
diff --git a/libs/design/src/core/prefix-suffix/suffix.directive.ts b/libs/design/src/core/prefix-suffix/suffix.directive.ts
new file mode 100644
index 0000000000..8c5f084294
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/suffix.directive.ts
@@ -0,0 +1,15 @@
+import { Directive, HostBinding } from '@angular/core';
+
+/**
+ *
+ * Prefix can be used to place content after another piece of content in components like
+ * `daff-form-field`, `daff-solo-field`, and `daff-list`.
+ */
+@Directive({
+ selector: '[daffSuffix]',
+})
+
+export class DaffSuffixDirective {
+
+ @HostBinding('class.daff-suffix') class = true;
+}
diff --git a/libs/design/src/core/prefix-suffix/suffixable/suffixable-interface.ts b/libs/design/src/core/prefix-suffix/suffixable/suffixable-interface.ts
new file mode 100644
index 0000000000..6cbf1b9a5d
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/suffixable/suffixable-interface.ts
@@ -0,0 +1,9 @@
+import { DaffSuffixDirective } from '../suffix.directive';
+
+/**
+ * An interface enforcing that a component has the ability to interact with a given DaffSuffixDirective.
+ */
+export interface DaffSuffixable {
+
+ _suffix: DaffSuffixDirective;
+}
diff --git a/libs/design/src/core/prefix-suffix/suffixable/suffixable.spec.ts b/libs/design/src/core/prefix-suffix/suffixable/suffixable.spec.ts
new file mode 100644
index 0000000000..47a3108942
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/suffixable/suffixable.spec.ts
@@ -0,0 +1,60 @@
+import { Component } from '@angular/core';
+import { ReactiveFormsModule } from '@angular/forms';
+import { ComponentFixture, async, TestBed } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+
+import { daffSuffixableMixin } from './suffixable';
+import { DaffPrefixSuffixModule } from '../prefix-suffix.module';
+import { DaffSuffixDirective } from '../suffix.directive';
+
+class SuffixableComponentBase {}
+
+const _suffixableComponentBase = daffSuffixableMixin(SuffixableComponentBase);
+
+@Component({
+ selector: 'daff-suffixable',
+ template: ''
+})
+class SuffixableComponent extends _suffixableComponentBase {}
+
+@Component({
+ template: ''
+})
+class WrapperComponent {}
+
+
+describe('daffSuffixableMixin', () => {
+ let fixture: ComponentFixture;
+ let wrapper: WrapperComponent;
+ let suffixableComponent: SuffixableComponent;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ imports: [
+ ReactiveFormsModule,
+ DaffPrefixSuffixModule
+ ],
+ declarations: [
+ WrapperComponent,
+ SuffixableComponent
+ ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(WrapperComponent);
+ wrapper = fixture.componentInstance;
+ fixture.detectChanges();
+
+ suffixableComponent = fixture.debugElement.query(By.css('daff-suffixable')).componentInstance;
+ });
+
+ it('should add a _suffix property to an existing class', () => {
+ expect('_suffix' in suffixableComponent).toBeTruthy();
+ });
+
+ it('should make the _suffix property the daffPrefix directive instance', () => {
+ expect(suffixableComponent._suffix).toEqual(jasmine.any(DaffSuffixDirective));
+ });
+});
diff --git a/libs/design/src/core/prefix-suffix/suffixable/suffixable.ts b/libs/design/src/core/prefix-suffix/suffixable/suffixable.ts
new file mode 100644
index 0000000000..84321c38f2
--- /dev/null
+++ b/libs/design/src/core/prefix-suffix/suffixable/suffixable.ts
@@ -0,0 +1,19 @@
+import { ContentChild } from '@angular/core';
+import { DaffSuffixDirective } from '../suffix.directive';
+import { Constructor } from '../../constructor';
+
+/**
+ * A mixin for giving a component the ability to place content after another piece of content.
+ */
+export function daffSuffixableMixin(Base: T) {
+ class Suffixable extends Base {
+
+ @ContentChild(DaffSuffixDirective, { static: true}) _suffix: DaffSuffixDirective;
+
+ constructor(...args: any[]) {
+ super(...args);
+ }
+ }
+
+ return Suffixable;
+}