Skip to content

Commit

Permalink
Merge pull request #56 from josemarluedke/feat/modals
Browse files Browse the repository at this point in the history
Create Overlay and Modal component
  • Loading branch information
josemarluedke committed Apr 4, 2020
2 parents e8301e5 + c833224 commit e8f18f9
Show file tree
Hide file tree
Showing 44 changed files with 1,448 additions and 57 deletions.
4 changes: 2 additions & 2 deletions packages/buttons/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"@types/ember": "^3.1.2",
"@types/ember-qunit": "^3.4.8",
"@types/ember__test-helpers": "^0.7.10",
"@types/qunit": "^2.9.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
"autoprefixer": "^9.7.5",
"broccoli-asset-rev": "^3.0.0",
Expand All @@ -52,7 +52,7 @@
"ember-maybe-import-regenerator": "^0.1.6",
"ember-qunit": "^4.6.0",
"ember-resolver": "^7.0.0",
"ember-source": "~3.17.2",
"ember-source": "~3.17.3",
"ember-try": "^1.4.0",
"loader.js": "^4.7.0",
"qunit-dom": "^1.1.0",
Expand Down
4 changes: 2 additions & 2 deletions packages/changeset-form/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"@types/ember": "^3.1.2",
"@types/ember-qunit": "^3.4.8",
"@types/ember__test-helpers": "^0.7.10",
"@types/qunit": "^2.9.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
"autoprefixer": "^9.7.5",
"broccoli-asset-rev": "^3.0.0",
Expand All @@ -54,7 +54,7 @@
"ember-maybe-import-regenerator": "^0.1.6",
"ember-qunit": "^4.6.0",
"ember-resolver": "^7.0.0",
"ember-source": "~3.17.2",
"ember-source": "~3.17.3",
"ember-try": "^1.4.0",
"loader.js": "^4.7.0",
"qunit-dom": "^1.1.0",
Expand Down
6 changes: 3 additions & 3 deletions packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"ember-cli-babel": "^7.19.0",
"ember-cli-htmlbars": "^4.2.3",
"ember-cli-typescript": "^3.1.3",
"focus-visible": "^5.0.2"
"focus-visible": "^5.1.0"
},
"devDependencies": {
"@babel/core": "^7.9.0",
Expand All @@ -37,7 +37,7 @@
"@types/ember": "^3.1.2",
"@types/ember-qunit": "^3.4.8",
"@types/ember__test-helpers": "^0.7.10",
"@types/qunit": "^2.9.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
"broccoli-asset-rev": "^3.0.0",
"ember-auto-import": "^1.3.0",
Expand All @@ -51,7 +51,7 @@
"ember-maybe-import-regenerator": "^0.1.6",
"ember-qunit": "^4.4.1",
"ember-resolver": "^7.0.0",
"ember-source": "^3.17.2",
"ember-source": "^3.17.3",
"ember-try": "^1.2.1",
"loader.js": "^4.7.0",
"qunit-dom": "^1.1.0",
Expand Down
37 changes: 37 additions & 0 deletions packages/docs/app/components/demo/overlays/demo-modal.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<Button
{{on "click" this.toggleModal}}
>
Open Modal
</Button>

<div class="relative h-48 w-3xl">
<Modal
@isOpen={{this.isOpen}}
@onClose={{this.toggleModal}}
@renderInPlace={{false}}
as |m|
>
<m.Header>Title</m.Header>
<m.Body>
<p>Some contents...</p>
<p>Some contents...</p>
<p>Some contents...</p>
</m.Body>
<m.Footer>
<Button
@appearance="minimal"
class="mr-4"
{{on "click" this.toggleModal}}
>
Cancel
</Button>
<Button
@intent="primary"
disabled={{this.isLoading}}
{{on "click" this.save}}
>
{{if this.isLoading "Loading..." "Save"}}
</Button>
</m.Footer>
</Modal>
</div>
28 changes: 28 additions & 0 deletions packages/docs/app/components/demo/overlays/demo-modal.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { later } from '@ember/runloop';

interface DemoModalArgs {}

export default class DemoModal extends Component<DemoModalArgs> {
@tracked isOpen = false;
@tracked isLoading = false;

@action toggleModal(): void {
this.isOpen = !this.isOpen;
}

@action save(): void {
this.isLoading = true;

later(
this,
() => {
this.isLoading = false;
this.isOpen = false;
},
1000
);
}
}
3 changes: 3 additions & 0 deletions packages/docs/app/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ Router.map(function () {
this.route('notifications', function () {
this.route('usage');
});
this.route('overlays', function () {
this.route('usage');
});
});

this.route('not-found', { path: '/*path' });
Expand Down
1 change: 1 addition & 0 deletions packages/docs/app/styles/tailwind.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ module.exports = {
plugins: [
require('@frontile/forms/tailwind'),
require('@frontile/notifications/tailwind'),
require('@frontile/overlays/tailwind'),
require('@frontile/buttons/tailwind')
]
};
4 changes: 4 additions & 0 deletions packages/docs/app/templates/docs.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@
{{nav.item "Installation" "docs.notifications.index"}}
{{nav.item "Usage" "docs.notifications.usage"}}

{{nav.section "Overlays"}}
{{nav.item "Installation" "docs.overlays.index"}}
{{nav.item "Usage" "docs.overlays.usage"}}

{{nav.section "Buttons"}}
{{nav.item "Installation" "docs.buttons.index"}}

Expand Down
5 changes: 5 additions & 0 deletions packages/docs/app/templates/docs/overlays/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Overlays Installation

```sh
ember install @frontile/overlays
```
3 changes: 3 additions & 0 deletions packages/docs/app/templates/docs/overlays/usage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Modal

<Demo::Overlays::DemoModal />
5 changes: 3 additions & 2 deletions packages/docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,13 @@
"@frontile/core": "^0.1.0-alpha.6",
"@frontile/forms": "^0.1.0-alpha.6",
"@frontile/notifications": "^0.1.0-alpha.6",
"@frontile/overlays": "^0.1.0-alpha.6",
"@glimmer/component": "^1.0.0",
"@glimmer/tracking": "^1.0.0",
"@types/ember": "^3.1.2",
"@types/ember-qunit": "^3.4.8",
"@types/ember__test-helpers": "^0.7.10",
"@types/qunit": "^2.9.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
"autoprefixer": "^9.7.5",
"broccoli-asset-rev": "^3.0.0",
Expand All @@ -58,7 +59,7 @@
"ember-maybe-import-regenerator": "^0.1.6",
"ember-qunit": "^4.6.0",
"ember-resolver": "^7.0.0",
"ember-source": "^3.17.2",
"ember-source": "^3.17.3",
"loader.js": "^4.7.0",
"qunit-dom": "^1.1.0",
"tailwindcss": "^1.2.0",
Expand Down
4 changes: 2 additions & 2 deletions packages/forms/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"@types/ember": "^3.1.2",
"@types/ember-qunit": "^3.4.8",
"@types/ember__test-helpers": "^0.7.10",
"@types/qunit": "^2.9.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
"autoprefixer": "^9.7.5",
"broccoli-asset-rev": "^3.0.0",
Expand All @@ -54,7 +54,7 @@
"ember-maybe-import-regenerator": "^0.1.6",
"ember-qunit": "^4.6.0",
"ember-resolver": "^7.0.0",
"ember-source": "^3.17.2",
"ember-source": "^3.17.3",
"ember-try": "^1.4.0",
"loader.js": "^4.7.0",
"qunit-dom": "^1.1.0",
Expand Down
6 changes: 3 additions & 3 deletions packages/notifications/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@
"@types/ember": "^3.1.2",
"@types/ember-qunit": "^3.4.8",
"@types/ember__test-helpers": "^0.7.10",
"@types/qunit": "^2.9.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
"@types/sinon": "^7.5.2",
"@types/sinon": "^9.0.0",
"autoprefixer": "^9.7.5",
"broccoli-asset-rev": "^3.0.0",
"ember-auto-import": "^1.5.3",
Expand All @@ -58,7 +58,7 @@
"ember-qunit": "^4.6.0",
"ember-resolver": "^7.0.0",
"ember-sinon": "^5.0.0",
"ember-source": "~3.17.2",
"ember-source": "~3.17.3",
"ember-try": "^1.4.0",
"loader.js": "^4.7.0",
"qunit-dom": "^1.1.0",
Expand Down
5 changes: 5 additions & 0 deletions packages/overlays/addon/-private/dom.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export function getDOM(context: unknown): null | HTMLDocument;
export function getElementById(
doc: HTMLElement | HTMLDocument,
id: string
): null | HTMLElement;
61 changes: 61 additions & 0 deletions packages/overlays/addon/-private/dom.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { getOwner } from '@ember/application';

// adjusted from https://github.com/yapplabs/ember-wormhole/blob/0.5.4/addon/utils/dom.js#L45-L63
// Copied from https://github.com/ember-intl/ember-intl/blob/a66560d0af9f08af20778a3eb3003045e19fbf16/addon/-private/utils/get-dom.js
//
// Private Ember API usage. Get the dom implementation used by the current
// renderer, be it native browser DOM or Fastboot SimpleDOM
/**
* @private
* @hide
*/
export function getDOM(context) {
let { renderer } = context;
if (!renderer || !renderer._dom) {
// pre glimmer2
const container = getOwner ? getOwner(context) : context.container;
const documentService = container.lookup('service:-document');

if (documentService) {
return documentService;
}

renderer = container.lookup('renderer:-dom');
}

if (renderer._dom && renderer._dom.document) {
// pre Ember 2.6
return renderer._dom.document;
}

return null;
}

function childNodesOfElement(element) {
const children = [];
let child = element.firstChild;
while (child) {
children.push(child);
child = child.nextSibling;
}
return children;
}

export function getElementById(doc, id) {
if (doc.getElementById) {
return doc.getElementById(id);
}

let nodes = childNodesOfElement(doc);
let node;

while (nodes.length) {
node = nodes.shift();

if (node.getAttribute && node.getAttribute('id') === id) {
return node;
}

nodes = childNodesOfElement(node).concat(nodes);
}
}
6 changes: 6 additions & 0 deletions packages/overlays/addon/components/modal/body.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div
class="modal__body"
...attributes
>
{{yield}}
</div>
5 changes: 5 additions & 0 deletions packages/overlays/addon/components/modal/body.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Component from '@glimmer/component';

interface ModalBodyArgs {}

export default class ModalBody extends Component<ModalBodyArgs> {}
6 changes: 6 additions & 0 deletions packages/overlays/addon/components/modal/footer.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div
class="modal__footer"
...attributes
>
{{yield}}
</div>
5 changes: 5 additions & 0 deletions packages/overlays/addon/components/modal/footer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Component from '@glimmer/component';

interface ModalFooterArgs {}

export default class ModalFooter extends Component<ModalFooterArgs> {}
7 changes: 7 additions & 0 deletions packages/overlays/addon/components/modal/header.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<div
id={{@labelledById}}
class="modal__header"
...attributes
>
{{yield}}
</div>
10 changes: 10 additions & 0 deletions packages/overlays/addon/components/modal/header.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import Component from '@glimmer/component';

interface ModalHeaderArgs {
/*
* The id used to reference labelledById in Modal component
*/
labelledById: string;
}

export default class ModalHeader extends Component<ModalHeaderArgs> {}
39 changes: 39 additions & 0 deletions packages/overlays/addon/components/modal/index.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<Overlay
@isOpen={{@isOpen}}
@onClose={{this.handleClose}}
@renderInPlace={{@renderInPlace}}
@destinationElementId={{@destinationElementId}}
@transitionDuration={{@transitionDuration}}
@disableBackdrop={{@disableBackdrop}}
@disableTransitions={{@disableTransitions}}
@disableFocusTrap={{@disableFocusTrap}}
@closeOnOutsideClick={{if this.preventClosing false @closeOnOutsideClick}}
@closeOnEscapeKey={{if this.preventClosing false @closeOnEscapeKey}}
@backdropTransitionName={{@backdropTransitionName}}
@contentTransitionName={{if @transitionName @transitionName "overlay--transition--zoom"}}
>
<div
class="modal"
tabindex="0"
role="dialog"
aria-labelledby={{this.headerId}}
...attributes
>
{{#unless this.preventClosing}}
<button
{{on "click" this.handleClose}}
type="button"
class="modal__close-btn"
>
<span class="modal__close-btn--icon"></span>
<VisuallyHidden>Close</VisuallyHidden>
</button>
{{/unless}}

{{yield (hash
Header=(component "modal/header" labelledById=this.headerId)
Body=(component "modal/body")
Footer=(component "modal/footer")
)}}
</div>
</Overlay>

0 comments on commit e8f18f9

Please sign in to comment.